diff --git a/bigbrother.py b/bigbrother.py index 73db95d..0006a9a 100755 --- a/bigbrother.py +++ b/bigbrother.py @@ -49,7 +49,7 @@ from utils.resource import ( ) console = Console() -logger = logging.getLogger("sensor.cli") +logger = logging.getLogger(__name__) # PID file for daemon mode PID_FILE = "/tmp/.bb.pid" diff --git a/config/bigbrother.yaml b/config/bigbrother.yaml index ca27a58..5091391 100644 --- a/config/bigbrother.yaml +++ b/config/bigbrother.yaml @@ -45,7 +45,7 @@ connectivity: reverse_ssh: relay_host: "" relay_port: 22 - relay_user: "bb" + relay_user: "operator" key_file: "storage/config/ssh_relay.key" security: @@ -90,7 +90,7 @@ bettercap: binary: "/usr/local/bin/bettercap" api_address: "127.0.0.1" # Localhost only -- never network-visible api_port: 8083 - api_user: "bb" + api_user: "admin" # api_password generated per-session, stored in memory only default_caplet: "passive_recon" caplets_path: "config/caplets" diff --git a/core/bus.py b/core/bus.py index d25d000..30194b0 100644 --- a/core/bus.py +++ b/core/bus.py @@ -13,7 +13,7 @@ import multiprocessing from dataclasses import dataclass, field, asdict from typing import Callable, Optional -logger = logging.getLogger("sensor.bus") +logger = logging.getLogger(__name__) # Canonical event types EVENT_TYPES = frozenset([ diff --git a/core/capture_bus.py b/core/capture_bus.py index 722b3a5..37a46be 100644 --- a/core/capture_bus.py +++ b/core/capture_bus.py @@ -16,7 +16,7 @@ import threading import multiprocessing from typing import Optional, Callable -logger = logging.getLogger("sensor.capture_bus") +logger = logging.getLogger(__name__) # ETH_P_ALL for capturing all protocols ETH_P_ALL = 0x0003 diff --git a/core/engine.py b/core/engine.py index b956c30..b9ab107 100644 --- a/core/engine.py +++ b/core/engine.py @@ -26,7 +26,7 @@ from core.state import StateManager from modules.base import BaseModule from utils.networking import detect_interface_with_retry -logger = logging.getLogger("sensor.engine") +logger = logging.getLogger(__name__) # Hardware tier definitions — module limits and resource ceilings HARDWARE_TIERS = { diff --git a/core/kill_switch.py b/core/kill_switch.py index 7922cae..976b2a7 100644 --- a/core/kill_switch.py +++ b/core/kill_switch.py @@ -28,7 +28,7 @@ from typing import Optional from core.bus import EventBus -logger = logging.getLogger("sensor.kill_switch") +logger = logging.getLogger(__name__) # Boot flag — if this file exists on boot, resume wipe WIPE_FLAG = "/var/run/.bb_wipe" diff --git a/core/resource_monitor.py b/core/resource_monitor.py index bc5fffe..a6e2ff4 100644 --- a/core/resource_monitor.py +++ b/core/resource_monitor.py @@ -17,7 +17,7 @@ from typing import Optional from core.bus import EventBus from core.state import StateManager -logger = logging.getLogger("sensor.resource_monitor") +logger = logging.getLogger(__name__) # Thermal thresholds (Celsius) THERMAL_WARNING = 55 diff --git a/core/scheduler.py b/core/scheduler.py index bad2210..1897920 100644 --- a/core/scheduler.py +++ b/core/scheduler.py @@ -14,7 +14,7 @@ from dataclasses import dataclass, field from typing import Callable, Optional from concurrent.futures import ThreadPoolExecutor -logger = logging.getLogger("sensor.scheduler") +logger = logging.getLogger(__name__) @dataclass diff --git a/core/state.py b/core/state.py index 36478ef..36d41ee 100644 --- a/core/state.py +++ b/core/state.py @@ -16,7 +16,7 @@ import logging from typing import Any, Optional from pathlib import Path -logger = logging.getLogger("sensor.state") +logger = logging.getLogger(__name__) _DEFAULT_DB = os.path.join( os.path.expanduser("~"), ".implant", "state.db" diff --git a/core/tool_manager.py b/core/tool_manager.py index a28bb5b..9c4d470 100644 --- a/core/tool_manager.py +++ b/core/tool_manager.py @@ -24,7 +24,7 @@ from typing import Callable, Optional from core.bus import EventBus -logger = logging.getLogger("sensor.tool_manager") +logger = logging.getLogger(__name__) @dataclass diff --git a/modules/active/arp_spoof.py b/modules/active/arp_spoof.py index d4f9d97..afe6028 100644 --- a/modules/active/arp_spoof.py +++ b/modules/active/arp_spoof.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.active.arp_spoof") +logger = logging.getLogger(__name__) class ARPSpoof(BaseModule): diff --git a/modules/active/bettercap_mgr.py b/modules/active/bettercap_mgr.py index 2758ba8..adb9bcf 100644 --- a/modules/active/bettercap_mgr.py +++ b/modules/active/bettercap_mgr.py @@ -22,7 +22,7 @@ from modules.base import BaseModule from utils.bettercap_api import BettercapAPI from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.active.bettercap_mgr") +logger = logging.getLogger(__name__) class BettercapManager(BaseModule): diff --git a/modules/active/dhcp_spoof.py b/modules/active/dhcp_spoof.py index 51606ae..2f03bbe 100644 --- a/modules/active/dhcp_spoof.py +++ b/modules/active/dhcp_spoof.py @@ -13,7 +13,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.active.dhcp_spoof") +logger = logging.getLogger(__name__) class DHCPSpoof(BaseModule): diff --git a/modules/active/dns_poison.py b/modules/active/dns_poison.py index b042cc7..f0a921d 100644 --- a/modules/active/dns_poison.py +++ b/modules/active/dns_poison.py @@ -14,7 +14,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.active.dns_poison") +logger = logging.getLogger(__name__) class DNSPoison(BaseModule): diff --git a/modules/active/evil_twin.py b/modules/active/evil_twin.py index d143aa3..62cbcef 100644 --- a/modules/active/evil_twin.py +++ b/modules/active/evil_twin.py @@ -25,7 +25,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.active.evil_twin") +logger = logging.getLogger(__name__) # Default dnsmasq config for captive portal DNSMASQ_CONF_TEMPLATE = """interface={iface} diff --git a/modules/active/ipv6_slaac.py b/modules/active/ipv6_slaac.py index 2d01567..45aeed1 100644 --- a/modules/active/ipv6_slaac.py +++ b/modules/active/ipv6_slaac.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.active.ipv6_slaac") +logger = logging.getLogger(__name__) class IPv6SLAAC(BaseModule): diff --git a/modules/active/mitmproxy_mgr.py b/modules/active/mitmproxy_mgr.py index 5a6025d..0f8f063 100644 --- a/modules/active/mitmproxy_mgr.py +++ b/modules/active/mitmproxy_mgr.py @@ -22,7 +22,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.active.mitmproxy_mgr") +logger = logging.getLogger(__name__) # Hardware tier check — mitmproxy is too heavy for RPi Zero 2W SUPPORTED_TIERS = {"opi_zero3", "rpi4", "full"} diff --git a/modules/active/ntlm_relay.py b/modules/active/ntlm_relay.py index 35c574e..a2d428c 100644 --- a/modules/active/ntlm_relay.py +++ b/modules/active/ntlm_relay.py @@ -20,7 +20,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.active.ntlm_relay") +logger = logging.getLogger(__name__) # Supported relay protocols RELAY_PROTOCOLS = frozenset(["smb", "ldap", "ldaps", "http", "https", "mssql", "adcs"]) diff --git a/modules/active/responder_mgr.py b/modules/active/responder_mgr.py index f5d0e21..0526c8b 100644 --- a/modules/active/responder_mgr.py +++ b/modules/active/responder_mgr.py @@ -22,7 +22,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.active.responder_mgr") +logger = logging.getLogger(__name__) # Regex for Responder hash log filenames HASH_FILE_PATTERN = re.compile( diff --git a/modules/connectivity/ble_emergency.py b/modules/connectivity/ble_emergency.py index a0eb7e6..da924b2 100644 --- a/modules/connectivity/ble_emergency.py +++ b/modules/connectivity/ble_emergency.py @@ -22,7 +22,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.connectivity.ble_emergency") +logger = logging.getLogger(__name__) # Custom BLE service/characteristic UUIDs (random, non-standard) SERVICE_UUID = "bb000001-1337-4000-8000-000000000001" diff --git a/modules/connectivity/bridge.py b/modules/connectivity/bridge.py index 527f777..2a4855d 100644 --- a/modules/connectivity/bridge.py +++ b/modules/connectivity/bridge.py @@ -22,7 +22,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.connectivity.bridge") +logger = logging.getLogger(__name__) BRIDGE_NAME = "br0" WATCHDOG_INTERVAL = 5.0 # seconds between health checks diff --git a/modules/connectivity/cellular_backup.py b/modules/connectivity/cellular_backup.py index 31cd0ab..962fcc9 100644 --- a/modules/connectivity/cellular_backup.py +++ b/modules/connectivity/cellular_backup.py @@ -22,7 +22,7 @@ except ImportError: from modules.base import BaseModule -logger = logging.getLogger("sensor.connectivity.cellular_backup") +logger = logging.getLogger(__name__) # Default serial device for modem AT commands DEFAULT_MODEM_DEVICE = "/dev/ttyUSB2" diff --git a/modules/connectivity/data_exfil.py b/modules/connectivity/data_exfil.py index 1264643..8bc835b 100644 --- a/modules/connectivity/data_exfil.py +++ b/modules/connectivity/data_exfil.py @@ -31,7 +31,7 @@ from modules.base import BaseModule from core.bus import Event from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.connectivity.data_exfil") +logger = logging.getLogger(__name__) class ExfilPriority(IntEnum): diff --git a/modules/connectivity/tailscale.py b/modules/connectivity/tailscale.py index e4abd69..d7215b6 100644 --- a/modules/connectivity/tailscale.py +++ b/modules/connectivity/tailscale.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.connectivity.tailscale") +logger = logging.getLogger(__name__) TAILSCALE_BIN = "/usr/bin/tailscale" TAILSCALED_BIN = "/usr/sbin/tailscaled" diff --git a/modules/connectivity/wifi_client.py b/modules/connectivity/wifi_client.py index 18378b1..528d63a 100644 --- a/modules/connectivity/wifi_client.py +++ b/modules/connectivity/wifi_client.py @@ -15,7 +15,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.connectivity.wifi_client") +logger = logging.getLogger(__name__) WPA_SUPPLICANT_BIN = "/sbin/wpa_supplicant" WPA_CLI_BIN = "/sbin/wpa_cli" diff --git a/modules/connectivity/wireguard.py b/modules/connectivity/wireguard.py index 8f94300..d210449 100644 --- a/modules/connectivity/wireguard.py +++ b/modules/connectivity/wireguard.py @@ -17,7 +17,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.connectivity.wireguard") +logger = logging.getLogger(__name__) WG_INTERFACE = "wg0" HEALTH_CHECK_TIMEOUT = 5 # seconds diff --git a/modules/intel/change_detector.py b/modules/intel/change_detector.py index 49032c3..928b48e 100644 --- a/modules/intel/change_detector.py +++ b/modules/intel/change_detector.py @@ -20,7 +20,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.intel.change_detector") +logger = logging.getLogger(__name__) _SCHEMA = """ CREATE TABLE IF NOT EXISTS changes ( diff --git a/modules/intel/credential_db.py b/modules/intel/credential_db.py index 8954cd8..7632a55 100644 --- a/modules/intel/credential_db.py +++ b/modules/intel/credential_db.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.intel.credential_db") +logger = logging.getLogger(__name__) _TABLE_DDL = """ CREATE TABLE IF NOT EXISTS credentials ( diff --git a/modules/intel/net_intel.py b/modules/intel/net_intel.py index 558f5c2..a8d93cc 100644 --- a/modules/intel/net_intel.py +++ b/modules/intel/net_intel.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.intel.net_intel") +logger = logging.getLogger(__name__) # Known malicious infrastructure patterns _KNOWN_BAD_PORTS = { diff --git a/modules/intel/operator_audit.py b/modules/intel/operator_audit.py index e2ac238..44889f5 100644 --- a/modules/intel/operator_audit.py +++ b/modules/intel/operator_audit.py @@ -20,7 +20,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.intel.operator_audit") +logger = logging.getLogger(__name__) _SCHEMA = """ CREATE TABLE IF NOT EXISTS audit_log ( diff --git a/modules/intel/security_posture.py b/modules/intel/security_posture.py index 99cd2c9..e9170cb 100644 --- a/modules/intel/security_posture.py +++ b/modules/intel/security_posture.py @@ -18,7 +18,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.intel.security_posture") +logger = logging.getLogger(__name__) _SCHEMA = """ CREATE TABLE IF NOT EXISTS security_tools ( diff --git a/modules/intel/supply_chain_detect.py b/modules/intel/supply_chain_detect.py index 42af186..e97c056 100644 --- a/modules/intel/supply_chain_detect.py +++ b/modules/intel/supply_chain_detect.py @@ -17,7 +17,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.intel.supply_chain_detect") +logger = logging.getLogger(__name__) _SCHEMA = """ CREATE TABLE IF NOT EXISTS supply_chain ( diff --git a/modules/intel/tool_output_parser.py b/modules/intel/tool_output_parser.py index 82df19a..5fcf22a 100644 --- a/modules/intel/tool_output_parser.py +++ b/modules/intel/tool_output_parser.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.intel.tool_output_parser") +logger = logging.getLogger(__name__) # ----------------------------------------------------------------------- # Responder log patterns @@ -372,8 +372,8 @@ class ToolOutputParser(BaseModule): api_host = self.config.get("bettercap", {}).get("host", "127.0.0.1") api_port = self.config.get("bettercap", {}).get("port", 8083) - api_user = self.config.get("bettercap", {}).get("user", "bb") - api_pass = self.config.get("bettercap", {}).get("password", "bb") + api_user = self.config.get("bettercap", {}).get("api_user", "admin") + api_pass = self.config.get("bettercap", {}).get("api_password", "") base_url = f"http://{api_host}:{api_port}" last_event_id = 0 diff --git a/modules/intel/topology_mapper.py b/modules/intel/topology_mapper.py index 350a516..39d1129 100644 --- a/modules/intel/topology_mapper.py +++ b/modules/intel/topology_mapper.py @@ -18,7 +18,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.intel.topology_mapper") +logger = logging.getLogger(__name__) # OS family -> Graphviz fill color _OS_COLORS = { diff --git a/modules/intel/user_timeline.py b/modules/intel/user_timeline.py index 5b844b7..ec0c764 100644 --- a/modules/intel/user_timeline.py +++ b/modules/intel/user_timeline.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.intel.user_timeline") +logger = logging.getLogger(__name__) _SCHEMA = """ CREATE TABLE IF NOT EXISTS user_events ( diff --git a/modules/passive/auth_flow_tracker.py b/modules/passive/auth_flow_tracker.py index 95404d3..521ae03 100644 --- a/modules/passive/auth_flow_tracker.py +++ b/modules/passive/auth_flow_tracker.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.auth_flow_tracker") +logger = logging.getLogger(__name__) # Protocol ports KERBEROS_PORT = 88 diff --git a/modules/passive/cloud_token_harvester.py b/modules/passive/cloud_token_harvester.py index cfda864..e455f1d 100644 --- a/modules/passive/cloud_token_harvester.py +++ b/modules/passive/cloud_token_harvester.py @@ -21,7 +21,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.passive.cloud_token_harvester") +logger = logging.getLogger(__name__) # Token regexes — compiled once _TOKEN_PATTERNS = { diff --git a/modules/passive/credential_sniffer.py b/modules/passive/credential_sniffer.py index aa86a43..d8e7f31 100644 --- a/modules/passive/credential_sniffer.py +++ b/modules/passive/credential_sniffer.py @@ -28,7 +28,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.passive.credential_sniffer") +logger = logging.getLogger(__name__) # Hashcat mode mapping HASHCAT_MODES = { diff --git a/modules/passive/db_interceptor.py b/modules/passive/db_interceptor.py index 4eac6db..c1f6600 100644 --- a/modules/passive/db_interceptor.py +++ b/modules/passive/db_interceptor.py @@ -24,7 +24,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.passive.db_interceptor") +logger = logging.getLogger(__name__) # TDS packet types TDS_SQL_BATCH = 0x01 diff --git a/modules/passive/dns_logger.py b/modules/passive/dns_logger.py index 35b24da..44c3a3d 100644 --- a/modules/passive/dns_logger.py +++ b/modules/passive/dns_logger.py @@ -20,7 +20,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.dns_logger") +logger = logging.getLogger(__name__) # Well-known DoH resolver IPs DOH_RESOLVERS = frozenset([ diff --git a/modules/passive/host_discovery.py b/modules/passive/host_discovery.py index dfbb9e0..5441557 100644 --- a/modules/passive/host_discovery.py +++ b/modules/passive/host_discovery.py @@ -25,7 +25,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.host_discovery") +logger = logging.getLogger(__name__) class HostDiscovery(BaseModule): diff --git a/modules/passive/kerberos_harvester.py b/modules/passive/kerberos_harvester.py index d2a7e18..ff348de 100644 --- a/modules/passive/kerberos_harvester.py +++ b/modules/passive/kerberos_harvester.py @@ -22,7 +22,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.kerberos_harvester") +logger = logging.getLogger(__name__) # Kerberos message types (application tags) KRB_AS_REQ = 10 diff --git a/modules/passive/ldap_harvester.py b/modules/passive/ldap_harvester.py index bcd1bb1..1324f3e 100644 --- a/modules/passive/ldap_harvester.py +++ b/modules/passive/ldap_harvester.py @@ -21,7 +21,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.passive.ldap_harvester") +logger = logging.getLogger(__name__) # LDAP protocol tags TAG_SEQUENCE = 0x30 diff --git a/modules/passive/network_mapper.py b/modules/passive/network_mapper.py index b5f97ea..a45856a 100644 --- a/modules/passive/network_mapper.py +++ b/modules/passive/network_mapper.py @@ -20,7 +20,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.network_mapper") +logger = logging.getLogger(__name__) TCP_PROTO = 6 UDP_PROTO = 17 diff --git a/modules/passive/os_fingerprint.py b/modules/passive/os_fingerprint.py index a98392c..0edad00 100644 --- a/modules/passive/os_fingerprint.py +++ b/modules/passive/os_fingerprint.py @@ -25,7 +25,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.os_fingerprint") +logger = logging.getLogger(__name__) # p0f-style TCP signature database (built-in fallback) # Format: (ttl_range, window_size, df, mss_range, sack, timestamps) -> (os_family, os_version) diff --git a/modules/passive/packet_capture.py b/modules/passive/packet_capture.py index d37bbfe..3b204b2 100644 --- a/modules/passive/packet_capture.py +++ b/modules/passive/packet_capture.py @@ -25,7 +25,7 @@ from typing import Optional from modules.base import BaseModule from utils.networking import detect_interface_with_retry -logger = logging.getLogger("sensor.passive.packet_capture") +logger = logging.getLogger(__name__) class PacketCapture(BaseModule): diff --git a/modules/passive/quic_analyzer.py b/modules/passive/quic_analyzer.py index acddcd5..2560ce5 100644 --- a/modules/passive/quic_analyzer.py +++ b/modules/passive/quic_analyzer.py @@ -21,7 +21,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.quic_analyzer") +logger = logging.getLogger(__name__) # QUIC constants QUIC_LONG_HEADER_BIT = 0x80 diff --git a/modules/passive/rdp_monitor.py b/modules/passive/rdp_monitor.py index 8596bb1..9a44db1 100644 --- a/modules/passive/rdp_monitor.py +++ b/modules/passive/rdp_monitor.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.rdp_monitor") +logger = logging.getLogger(__name__) # NTLM signature for CredSSP extraction NTLMSSP_SIGNATURE = b'NTLMSSP\x00' diff --git a/modules/passive/smb_monitor.py b/modules/passive/smb_monitor.py index 8154634..fa972c2 100644 --- a/modules/passive/smb_monitor.py +++ b/modules/passive/smb_monitor.py @@ -20,7 +20,7 @@ from typing import Optional from modules.base import BaseModule from utils.credential_encryption import emit_credential_found -logger = logging.getLogger("sensor.passive.smb_monitor") +logger = logging.getLogger(__name__) # SMB2 command IDs SMB2_NEGOTIATE = 0x0000 diff --git a/modules/passive/tls_sni_extractor.py b/modules/passive/tls_sni_extractor.py index a703cc7..4dc68f8 100644 --- a/modules/passive/tls_sni_extractor.py +++ b/modules/passive/tls_sni_extractor.py @@ -20,7 +20,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.tls_sni_extractor") +logger = logging.getLogger(__name__) # TLS record types TLS_HANDSHAKE = 22 diff --git a/modules/passive/traffic_analyzer.py b/modules/passive/traffic_analyzer.py index a9f552a..853fab1 100644 --- a/modules/passive/traffic_analyzer.py +++ b/modules/passive/traffic_analyzer.py @@ -25,7 +25,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.traffic_analyzer") +logger = logging.getLogger(__name__) # Protocol number to name mapping PROTO_NAMES = { diff --git a/modules/passive/vlan_discovery.py b/modules/passive/vlan_discovery.py index dfe1568..0b8b4ef 100644 --- a/modules/passive/vlan_discovery.py +++ b/modules/passive/vlan_discovery.py @@ -17,7 +17,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.passive.vlan_discovery") +logger = logging.getLogger(__name__) # Ethertypes and protocol IDs ETHERTYPE_8021Q = 0x8100 diff --git a/modules/stealth/anti_forensics.py b/modules/stealth/anti_forensics.py index 896b157..7c2bc99 100644 --- a/modules/stealth/anti_forensics.py +++ b/modules/stealth/anti_forensics.py @@ -19,7 +19,7 @@ from utils.stealth import ( _get_os_install_time, ) -logger = logging.getLogger("sensor.stealth.anti_forensics") +logger = logging.getLogger(__name__) # SystemMonitor install root (default; overridden by config) BB_ROOT = "/opt/.cache/bb" diff --git a/modules/stealth/encrypted_storage.py b/modules/stealth/encrypted_storage.py index 45e2614..80bdc06 100644 --- a/modules/stealth/encrypted_storage.py +++ b/modules/stealth/encrypted_storage.py @@ -19,7 +19,7 @@ from typing import Optional from modules.base import BaseModule from utils.crypto import LUKSContainer, derive_network_key -logger = logging.getLogger("sensor.stealth.encrypted_storage") +logger = logging.getLogger(__name__) # Subdirectories created inside the mounted LUKS container STORAGE_SUBDIRS = ("pcaps", "logs", "baseline", "intel", "credentials", "config") diff --git a/modules/stealth/ids_tester.py b/modules/stealth/ids_tester.py index 8689d10..544239f 100644 --- a/modules/stealth/ids_tester.py +++ b/modules/stealth/ids_tester.py @@ -12,7 +12,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.stealth.ids_tester") +logger = logging.getLogger(__name__) # Detection risk levels RISK_LOW = "LOW" diff --git a/modules/stealth/ja3_spoofer.py b/modules/stealth/ja3_spoofer.py index f992537..a1a0a41 100644 --- a/modules/stealth/ja3_spoofer.py +++ b/modules/stealth/ja3_spoofer.py @@ -15,7 +15,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.stealth.ja3_spoofer") +logger = logging.getLogger(__name__) # Built-in JA3 fingerprint profiles (fallback if data/ja3_fingerprints.db absent) # Format: {name: {ja3_hash, cipher_suites, extensions, description}} diff --git a/modules/stealth/lkm_rootkit.py b/modules/stealth/lkm_rootkit.py index 5e75daa..7f392b4 100644 --- a/modules/stealth/lkm_rootkit.py +++ b/modules/stealth/lkm_rootkit.py @@ -12,7 +12,7 @@ from typing import Optional from modules.base import BaseModule from utils.resource import get_hardware_tier, TIER_GENERIC -logger = logging.getLogger("sensor.stealth.lkm_rootkit") +logger = logging.getLogger(__name__) LKM_TEMPLATE_DIR = "templates/lkm" LKM_SOURCE = "bb_hide.c" diff --git a/modules/stealth/log_suppression.py b/modules/stealth/log_suppression.py index 7f76fcc..2c6082b 100644 --- a/modules/stealth/log_suppression.py +++ b/modules/stealth/log_suppression.py @@ -15,7 +15,7 @@ from typing import Dict, List from modules.base import BaseModule -logger = logging.getLogger("sensor.stealth.log_suppression") +logger = logging.getLogger(__name__) RSYSLOG_CONF = "/etc/rsyslog.d/01-bb-suppress.conf" JOURNALD_CONF_DIR = "/etc/systemd/journald.conf.d" diff --git a/modules/stealth/mac_manager.py b/modules/stealth/mac_manager.py index 53805fe..1ddb565 100644 --- a/modules/stealth/mac_manager.py +++ b/modules/stealth/mac_manager.py @@ -26,7 +26,7 @@ from utils.networking import ( ) from utils.stealth import set_sysctl, set_tcp_timestamps, set_tcp_window, set_ttl -logger = logging.getLogger("sensor.stealth.mac_manager") +logger = logging.getLogger(__name__) # Category preferences per network type _BUSINESS_CATEGORIES = ("printers", "network", "smart_home") diff --git a/modules/stealth/overlayfs_manager.py b/modules/stealth/overlayfs_manager.py index 7b9fc43..287add6 100644 --- a/modules/stealth/overlayfs_manager.py +++ b/modules/stealth/overlayfs_manager.py @@ -13,7 +13,7 @@ from typing import Optional from modules.base import BaseModule from utils.resource import get_hardware_tier, TIER_OPI_ZERO3, TIER_PI_ZERO, TIER_GENERIC -logger = logging.getLogger("sensor.stealth.overlayfs_manager") +logger = logging.getLogger(__name__) # Default overlay paths OVERLAY_BASE = "/opt/.cache/bb/overlay" diff --git a/modules/stealth/process_disguise.py b/modules/stealth/process_disguise.py index aa463dc..a791889 100644 --- a/modules/stealth/process_disguise.py +++ b/modules/stealth/process_disguise.py @@ -16,7 +16,7 @@ from typing import Dict, Optional from modules.base import BaseModule from utils.stealth import rename_process, spoof_cmdline -logger = logging.getLogger("sensor.stealth.process_disguise") +logger = logging.getLogger(__name__) class ProcessDisguise(BaseModule): diff --git a/modules/stealth/tmpfs_manager.py b/modules/stealth/tmpfs_manager.py index ea6b57c..053df6d 100644 --- a/modules/stealth/tmpfs_manager.py +++ b/modules/stealth/tmpfs_manager.py @@ -16,7 +16,7 @@ from typing import Dict, List, Optional, Tuple from modules.base import BaseModule from utils.resource import get_hardware_tier, TIER_OPI_ZERO3, TIER_PI_ZERO, TIER_GENERIC -logger = logging.getLogger("sensor.stealth.tmpfs_manager") +logger = logging.getLogger(__name__) # Default tmpfs size limits per tier (MB) _TIER_TMPFS_LIMITS = { diff --git a/modules/stealth/traffic_mimicry.py b/modules/stealth/traffic_mimicry.py index 03fade2..046a716 100644 --- a/modules/stealth/traffic_mimicry.py +++ b/modules/stealth/traffic_mimicry.py @@ -14,7 +14,7 @@ from typing import Optional from modules.base import BaseModule -logger = logging.getLogger("sensor.stealth.traffic_mimicry") +logger = logging.getLogger(__name__) PHASE_BASELINE = "baseline" PHASE_SHAPING = "shaping" diff --git a/modules/stealth/watchdog.py b/modules/stealth/watchdog.py index aca5801..4dfdd51 100644 --- a/modules/stealth/watchdog.py +++ b/modules/stealth/watchdog.py @@ -17,7 +17,7 @@ from modules.base import BaseModule from core.bus import Event from utils.resource import get_process_resources -logger = logging.getLogger("sensor.stealth.watchdog") +logger = logging.getLogger(__name__) # OOM priority assignments by module type _OOM_PRIORITIES = { diff --git a/scripts/run_watchdog.py b/scripts/run_watchdog.py index b1a054b..62bc287 100644 --- a/scripts/run_watchdog.py +++ b/scripts/run_watchdog.py @@ -19,7 +19,7 @@ logging.basicConfig( level=logging.WARNING, format="%(asctime)s %(levelname)s %(name)s: %(message)s", ) -logger = logging.getLogger("sensor.watchdog") +logger = logging.getLogger(__name__) CHECK_INTERVAL = 15.0 THERMAL_WARN = 60 diff --git a/tests/test_opsec_violations.py b/tests/test_opsec_violations.py new file mode 100644 index 0000000..163ea97 --- /dev/null +++ b/tests/test_opsec_violations.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +"""Test that OPSEC violations are fixed. + +Tests for: +1. sensor.* logger namespaces (should be __name__) +2. Hardcoded "bb" API user (should be generic) +3. Hardcoded "bb" relay_user (should be generic) +""" + +import os +import re +import subprocess +from pathlib import Path + + +def test_no_sensor_logger_fingerprints(): + """Verify that no logging.getLogger(__name__) calls exist.""" + bb_root = Path(__file__).parent.parent + + # Search for sensor.* logger calls in Python files + result = subprocess.run( + ["grep", "-r", r'getLogger("sensor\.', str(bb_root), "--include=*.py"], + capture_output=True, + text=True, + ) + + # Should find no matches (empty stdout) + assert result.stdout == "", ( + f"Found sensor.* logger fingerprints:\n{result.stdout}" + ) + + +def test_no_bb_api_user_hardcoded(): + """Verify that 'bb' is not hardcoded as bettercap API user.""" + bb_root = Path(__file__).parent.parent + + # Check config file + config_file = bb_root / "config" / "bigbrother.yaml" + with open(config_file) as f: + config_content = f.read() + + # Look for api_user: "bb" (should be something else) + match = re.search(r'api_user:\s*"([^"]+)"', config_content) + assert match and match.group(1) != "bb", ( + f"Found hardcoded api_user as 'bb' in config. Should be generic." + ) + + # Check Python files for hardcoded "bb" as default user parameter + result = subprocess.run( + ["grep", "-r", 'user:\s*str\s*=\s*"bb"', str(bb_root), "--include=*.py"], + capture_output=True, + text=True, + ) + + assert result.stdout == "", ( + f"Found hardcoded 'bb' as default user in code:\n{result.stdout}" + ) + + +def test_no_bb_relay_user_hardcoded(): + """Verify that 'bb' is not hardcoded as relay_user.""" + bb_root = Path(__file__).parent.parent + + # Check config file + config_file = bb_root / "config" / "bigbrother.yaml" + with open(config_file) as f: + config_content = f.read() + + # Look for relay_user: "bb" (should be something else) + match = re.search(r'relay_user:\s*"([^"]+)"', config_content) + assert match and match.group(1) != "bb", ( + f"Found hardcoded relay_user as 'bb' in config. Should be generic." + ) + + +if __name__ == "__main__": + test_no_sensor_logger_fingerprints() + test_no_bb_api_user_hardcoded() + test_no_bb_relay_user_hardcoded() + print("All OPSEC tests passed!") diff --git a/utils/bettercap_api.py b/utils/bettercap_api.py index 11dc67e..5f5e114 100644 --- a/utils/bettercap_api.py +++ b/utils/bettercap_api.py @@ -15,7 +15,7 @@ class BettercapAPI: self, host: str = "127.0.0.1", port: int = 8083, - user: str = "bb", + user: str = "admin", password: Optional[str] = None, timeout: int = 10, ): diff --git a/utils/credential_encryption.py b/utils/credential_encryption.py index 8778e25..fb5f672 100644 --- a/utils/credential_encryption.py +++ b/utils/credential_encryption.py @@ -6,7 +6,7 @@ import json import logging from typing import Optional -logger = logging.getLogger("sensor.credential_encryption") +logger = logging.getLogger(__name__) # Cache the key in memory during module lifetime _cached_key: Optional[bytes] = None diff --git a/utils/networking.py b/utils/networking.py index 7283df4..9c61f84 100644 --- a/utils/networking.py +++ b/utils/networking.py @@ -13,7 +13,7 @@ import logging from pathlib import Path from typing import List, Optional, Tuple -logger = logging.getLogger("sensor.utils.networking") +logger = logging.getLogger(__name__) SIOCGIFADDR = 0x8915 SIOCGIFHWADDR = 0x8927