Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sel4-ics-gateway-demo — 방어적 보안 데모: seL4 마이크로커널 게이트웨이가 취약한 ICS를 CVE-2019-14462로부터 보호 | Kitploit
도구/GitHubGitHub/spanwich/sel4-ics-gateway-demo
Defensive ToolsContainer SecurityVulnerability AnalysisExploitationSCADA/ICS SecurityNetwork SecurityIntrusion DetectionLearning & Education
GitHubspanwich/sel4-ics-gateway-demo

sel4-ics-gateway-demo

방어적 보안 데모: seL4 마이크로커널 게이트웨이가 취약한 ICS를 CVE-2019-14462로부터 보호

저장소 보기
167개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

seL4 ICS 게이트웨이 데모

사이버 공격으로부터 산업 제어 시스템을 보호하기 위한 프로토콜 차단 및 패킷 포워딩 아키텍처를 비교하는 방어적 보안 연구 프로젝트입니다.

문서:

  • 네트워크 아키텍처 - 네트워크 다이어그램 및 트래픽 흐름
  • 컨테이너 아키텍처 - Docker 컨테이너 관계
  • CVE 설명 - 취약점 세부 정보 및 공격 메커니즘

연구 동기

현대의 ICS/SCADA 시스템은 2024년 1월 Modbus TCP를 통해 우크라이나 지역 난방 시스템을 표적으로 삼아 영하의 기온에서 600가구 이상이 난방을 사용하지 못하게 한 FrostyGoop과 같은 정교한 공격에 직면해 있습니다. 기존 보안 솔루션(방화벽, IDS)은 인라인으로 트래픽을 검사하지만 종단 간 단일 TCP 연결을 유지하는 패킷 포워딩 아키텍처를 사용합니다.

이 프로젝트는 공식적으로 검증된 seL4 마이크로커널을 사용하는 프로토콜 차단 게이트웨이를 대안으로 제시합니다. TCP 연결을 종료하고 보호된 장치에 대한 새 연결을 설정하기 전에 프로토콜 의미를 검증함으로써 이 아키텍처는 더 강력한 보안 보장을 제공합니다.

주요 결과

측면프로토콜 차단 (seL4)패킷 포워딩 (Snort)
CVE-2019-14462차단됨 (길이 검증)탐지됨 (Quickdraw 규칙)
CVE-2022-0367차단됨 (주소 검증)탐지됨 (사용자 정의 규칙)
CVE-2022-20685면역 (전처리기 없음)취약 (IDS DoS)
CVE-2024-1086면역 (Linux 커널 없음)취약 (호스트 커널 공유)
알 수 없는 변종차단됨 (구조적 검증)미탐지 (시그니처 없음)
TCP 상태 공격차단됨 (연결 종료됨)가능
공격 표면~1,000 LoC (마이크로커널)~500,000 LoC (Linux + Snort)

아키텍처

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────────────┐
│ Docker Network: ics-untrusted (192.168.96.0/24)                             │
│                                                                             │
│   ┌───────────────────────┐       ┌───────────────────────┐                │
│   │ seL4 Gateway          │       │ Snort IDS             │                │
│   │ Port 502              │       │ Port 503              │                │
│   │                       │       │                       │                │
│   │ • Protocol-break      │       │ • Packet-forwarding   │                │
│   │ • TCP termination     │       │ • Inline inspection   │                │
│   │ • Length validation   │       │ • Rule-based detection│                │
│   └───────────┬───────────┘       └───────────┬───────────┘                │
│               │                               │                             │
├───────────────┼───────────────────────────────┼─────────────────────────────┤
│ Docker Network: ics-protected (192.168.95.0/24)                             │
│               │                               │                             │
│               └───────────────┬───────────────┘                             │
│                               ▼                                             │
│               ┌───────────────────────────────┐                             │
│               │ PLC (District Heating)        │                             │
│               │ Vulnerable libmodbus 3.1.2    │                             │
│               │ Port 5020 (direct access)     │                             │
│               └───────────────────────────────┘                             │
└─────────────────────────────────────────────────────────────────────────────┘

빠른 시작

사전 요구 사항

  • Docker 및 Docker Compose v2
  • seL4 게이트웨이 커널 이미지 (사용자 제공)
  • QEMU용 ~4GB RAM

1. seL4 이미지 추가

root@kitploit:~
# Place your seL4 kernel image at:
gateway/sel4-image/capdl-loader-image-arm-qemu-arm-virt

2. 빌드 및 실행

root@kitploit:~
# Build all containers
sudo docker compose build

# Start individual containers
sudo docker compose up plc        # PLC only
sudo docker compose up gateway    # seL4 gateway + PLC
sudo docker compose up snort      # Snort IDS + PLC

# Start all
sudo docker compose up

3. 연결 테스트

root@kitploit:~
# Through seL4 gateway (protected - protocol-break)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 502 | xxd

# Through Snort IDS (protected - packet-forwarding)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 503 | xxd

# Direct to PLC (unprotected - vulnerable)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 5020 | xxd

포트 매핑

참고: 기본 PLC는 이제 ASAN과 함께 CVE-2022-0367 모드로 실행됩니다. CVE-2019-14462 테스트에는 --profile cve14462를 사용하세요.

취약점 데모

CVE-2019-14462: libmodbus 힙 버퍼 오버플로우

PLC는 의도적으로 취약한 libmodbus 3.1.2를 사용합니다. 이 공격은 신뢰된 MBAP 길이 필드를 악용합니다:

root@kitploit:~
# Start PLC in CVE-2019-14462 mode
sudo docker compose --profile cve14462 up plc-14462

# Build attack tools
cd cve_tools && make

# Attack unprotected PLC (crashes)
./cve_14462_attack 127.0.0.1 5022

# Attack through seL4 (BLOCKED)
./cve_14462_attack 127.0.0.1 502

# Attack through Snort (DETECTED by Quickdraw rules)
./cve_14462_attack 127.0.0.1 503

CVE-2022-0367: libmodbus 힙 버퍼 언더플로우

modbus_mapping_new_start_address()의 경계 검사 버그로 인해 함수 코드 0x17(레지스터 쓰기 및 읽기)을 통해 힙 언더플로우가 발생합니다:

root@kitploit:~
# Default PLC runs in CVE-2022-0367 mode with ASAN
sudo docker compose up plc

# Build attack tools
cd cve_tools && make

# Attack PLC - ASAN will detect heap-buffer-overflow
./cve_0367_attack 127.0.0.1 5020

# Attack with custom parameters
./cve_0367_attack 127.0.0.1 5020 88 0x4141  # Corrupt tab_registers pointer
./cve_0367_attack 127.0.0.1 5020 72 0xFFFF  # Corrupt nb_registers

# Attack through seL4 (BLOCKED - address validation)
./cve_0367_attack 127.0.0.1 502

# Attack through Snort (DETECTED by custom rules)
./cve_0367_attack 127.0.0.1 503

기술 세부 사항:

  • 서버는 start_registers=100을 사용하며, 유효한 주소는 100-109입니다.
  • 공격은 write_address < 100을 전송하여 음수 배열 인덱스를 유발합니다.
  • 힙 언더플로우는 포인터를 포함한 mb_mapping 구조체 필드를 손상시킬 수 있습니다.

CVE-2022-20685: Snort Modbus 전처리기 DoS

Snort 2.9.18의 Modbus 전처리기에 정수 오버플로우가 있어 무한 루프를 발생시켜 IDS를 통과하는 모든 트래픽을 완전히 차단합니다:

root@kitploit:~
# 1. Verify Snort is working (should return Modbus response)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc -w 2 localhost 503 | xxd

# 2. Attack the Snort IDS
./cve_20685_attack 127.0.0.1 503

# 3. Verify Snort is frozen (should timeout with NO response)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc -w 5 localhost 503 | xxd

# 4. Check Snort CPU (should be 100%)
sudo docker exec ics-snort top -b -n 1 | grep snort

# 5. seL4 is IMMUNE (no Modbus preprocessor to exploit)
./cve_20685_attack 127.0.0.1 502  # No effect on seL4

# 6. Restart Snort after demo
sudo docker compose restart snort

이것이 치명적인 이유: Snort는 NFQUEUE 인라인 모드를 사용하므로 Snort가 판결을 반환할 때까지 패킷이 커널 큐에 보관됩니다. Snort가 중단되면 판결이 반환되지 않고 모든 트래픽이 중단됩니다. 이는 IDS의 탐지 불능뿐만 아니라 완전한 서비스 거부를 의미합니다.

CVE-2024-1086: Linux 커널 권한 상승

Linux netfilter nf_tables(v5.14-v6.6 커널)의 use-after-free로 인해 컨테이너 이스케이프가 가능합니다:

root@kitploit:~
# Check if host is vulnerable
uname -r  # Vulnerable: v5.14 - v6.6 (before patches)

# The exploit is available at:
ls cve_tools/cve-2024-1086/

이것이 중요한 이유: Docker 컨테이너는 호스트 커널을 공유합니다. 공격자가 Snort를 손상시키면(예: CVE-2022-20685를 통해) CVE-2024-1086을 사용하여 컨테이너를 탈출하고 호스트에서 루트 권한을 획득할 수 있습니다. seL4는 Linux가 아닌 최소 마이크로커널을 실행하므로 면역입니다.

데모 스크립트

root@kitploit:~
# Full demo with 4 quadrants (PLC, seL4, Snort, User terminal)
./scripts/demo.sh

# Snort-only demo with 3 panes (PLC, Snort, User terminal)
./scripts/demo-snort.sh

전체 비교 실험

root@kitploit:~
# Run automated comparison
./scripts/run_comparison.sh

Snort 규칙 프로파일

탐지 효율성 벤치마킹을 위한 여러 Snort 구성이 제공됩니다:

root@kitploit:~
# Run Snort with specific profile
sudo docker compose --profile snort-talos up

# Compare detection efficiency
sudo docker compose --profile snort-quickdraw up -d
./cve_tools/cve_0367_attack 127.0.0.1 503  # Test detection
sudo docker compose --profile snort-quickdraw down

sudo docker compose --profile snort-combined up -d
./cve_tools/cve_0367_attack 127.0.0.1 503  # Test detection
sudo docker compose --profile snort-combined down

규칙 커버리지 비교

프로토콜 차단 vs 패킷 포워딩

패킷 포워딩 (전통적인 IDS/IPS)

root@kitploit:~
Client ────TCP────► Snort ────TCP────► PLC
          (same connection flows through)
  • 종단 간 단일 TCP 연결
  • 공격자가 TCP 상태를 조작할 수 있음
  • IDS가 공격될 수 있음 (CVE-2022-20685)
  • 각 공격 변종에 대한 시그니처 필요

프로토콜 차단 (seL4 게이트웨이)

root@kitploit:~
Client ────TCP1────► seL4 ────TCP2────► PLC
              (terminates, validates, new connection)
  • 두 개의 독립적인 TCP 연결
  • 클라이언트가 PLC의 TCP 상태에 영향을 줄 수 없음
  • 데이터가 PLC에 도달하기 전에 검증
  • 잘못된 입력의 전체 클래스 탐지

구성 요소

CVE 도구

PLC 시뮬레이션

PLC는 다중 마스터 지원을 통해 지역 난방 컨트롤러를 시뮬레이션합니다 (현대 PLC의 일반적인 클라이언트당 스레드 아키텍처).

PLC 모드

모드서비스포트설명
CVE-2022-0367plc (기본)5020ASAN 빌드, 주소 100-109의 레지스터
root@kitploit:~
# Default mode (CVE-2022-0367 with ASAN)
sudo docker compose up plc

# CVE-2019-14462 mode
sudo docker compose --profile cve14462 up plc-14462

Modbus 레지스터

CVE-2022-0367 모드에서 레지스터는 주소 100-109에 있습니다 (SCADA 도구에서는 주소 40101 사용):

보안 고지

이 프로젝트는 방어적 보안 연구를 위해 의도적으로 취약한 코드를 포함하고 있습니다. 취약한 libmodbus 3.1.2 및 Snort 2.9.18은 보안 개념을 설명하기 위해 포함되었습니다.

프로덕션 환경에서 보호되지 않은 구성 요소를 배포하지 마십시오.

참고 자료

취약점

  • CVE-2019-14462 - libmodbus 힙 버퍼 오버플로우 (MBAP 길이)
  • CVE-2022-0367 - libmodbus 힙 버퍼 언더플로우 (start_address)
  • CVE-2022-20685 - Snort Modbus 전처리기 DoS
  • CVE-2024-1086 - Linux 커널 nf_tables 권한 상승

보안 연구

  • Claroty Team82 - Snort CVE-2022-20685 분석
  • libmodbus Issue #614 - CVE-2022-0367 공개
  • CVE-2024-1086 PoC - 99.4% 성공률의 커널 익스플로잇

ICS/SCADA 리소스

  • seL4 Microkernel - 공식적으로 검증된 마이크로커널
  • Digital Bond Quickdraw - 업계 표준 ICS/SCADA Snort 규칙
  • Dragos FrostyGoop Report - ICS 악성코드 분석 (2024년 1월 우크라이나 공격)
  • The Record - FrostyGoop - 우크라이나 600가구 난방 중단

라이선스

승인된 방어적 보안 연구 및 교육 목적으로만 사용할 수 있습니다.

도구 다운로드
포트경로아키텍처보호
502클라이언트 → seL4 → PLC프로토콜 차단Modbus 구조 검증
503클라이언트 → Snort → PLC패킷 포워딩규칙 기반 IDS
5020클라이언트 → PLC (ASAN)직접CVE-2022-0367 모드
5022클라이언트 → PLC직접CVE-2019-14462 모드 (프로파일: cve14462)
프로파일명령규칙설명
기본docker compose up snort12Quickdraw (업계 표준)
quickdraw--profile snort-quickdraw12Digital Bond Quickdraw만
talos--profile snort-talos40modbus_func 키워드를 사용한 Talos 스타일
modbus--profile snort-modbus13사용자 정의 CVE 탐지 규칙만
combined--profile snort-combined65모든 규칙 결합
CVEQuickdrawTalos사용자 정의 Modbus
CVE-2019-14462 (MBAP length)✅✅✅
CVE-2022-0367 (heap underflow)❌✅✅
CVE-2022-20685 (Snort DoS)❌✅✅
쓰기 작업❌✅✅
정찰✅✅✅
DoS 함수 코드✅✅❌
디렉터리설명
gateway/seL4 게이트웨이 컨테이너 (QEMU + seL4 커널)
snort/Snort 2.9.18 IDS, 여러 규칙 프로파일 포함 (CVE-2022-20685에 취약)
plc/지역 난방 시뮬레이션 (취약한 libmodbus 3.1.2, CVE-2022-0367 모드)
cve_tools/CVE 데모용 공격 도구
scripts/유틸리티 및 실험 스크립트
docs/Mermaid 다이어그램이 포함된 문서 (네트워크, 컨테이너, CVE)
도구대상설명
cve_14462_attacklibmodbusMBAP 길이 불일치를 통한 힙 버퍼 오버플로우
cve_0367_attacklibmodbus잘못된 쓰기 주소를 통한 힙 언더플로우 (FC 0x17)
cve_20685_attackSnortModbus 전처리기 무한 루프 (DoS)
cve-2024-1086/Linux 커널nf_tables를 통한 권한 상승 (컨테이너 이스케이프)
CVE-2019-14462plc-144625022일반 빌드, 주소 0-9의 레지스터
주소레지스터설명R/W
100HR[0]실내 온도 (°C ÷10)R
101HR[1]밸브 명령 (0-100%)R/W
102HR[2]온도 설정점 (°C ÷10)R/W
103HR[3]모드 (0=수동, 1=자동)R/W
104HR[4]외부 온도 (°C ÷10)R
105-109HR[5-9]상태, 위치, 공급 온도, 실행 시간, 전력R