업데이트로 돌아가기
New releaseAug 10, 2026

iocx v0.7.6

PE 바이너리와 텍스트에서 고신호 IOC를 추출하는 확장 가능하고 결정론적인 정적 분석 엔진으로, SOC 자동화 및 현대 위협 분석 파이프라인을 위해 구축되었습니다.

공유

IOCX

현대 보안 파이프라인을 위한 결정적(Deterministic) · 무위험 IOC 추출

IOCX Demo

IOCX CLI를 사용한 PE 파일의 정적 IOC 추출

공식 IOCX 프로젝트

이것은 결정적 정적 IOC 추출 및 PE 분석을 위한 원본 IOCX 엔진입니다. "iocx"라는 이름을 사용하는 다른 저장소는 이 프로젝트와 관련이 없습니다.

공식 링크:


IOCX가 중요한 이유

현대 악성코드는 기본적으로 적대적(adversarial)입니다 — 변형되고, 탐지를 회피하며, 단순한 추출기를 깨뜨리도록 설계되었습니다.

  • 바이너리를 인식하지 못하는 도구는 변형된 PE에서 쉽게 무너집니다
  • 샌드박스는 안전하지 않으며 CI/CD에서 사용할 수 없습니다
  • 재현성은 자동화된 파이프라인에 필수적입니다

IOCX는 정확성과 결정성이 실제로 중요한 환경을 위해 구축되었습니다.


IOCX 엔진

IOCX는 공식 정적 IOC 추출 엔진입니다 — DFIR, SOC 자동화, CI/CD 보안, 대규모 위협 인텔리전스 파이프라인을 위해 구축된 결정적이고 바이너리 인식 시스템입니다.

정규식 기반 추출기나 샌드박스 의존 도구와 달리 IOCX는 다음을 수행합니다:

  • 순수 정적 분석
  • 실행 위험 제로
  • 안정적이고 결정적인 출력
  • 적대적 테스트를 거친 휴리스틱

확장 가능한 현대 위협 분석을 위한 MalX Labs 생태계의 핵심 구성 요소입니다.


10초 만에 IOCX 사용해 보기

echo "http://malicious.example" | iocx -

또는 PE 파일을 안전하게 스캔합니다:

iocx suspicious.exe -a deep

IOCX가 존재하는 이유

보안 팀은 세 가지 지속적인 문제에 직면합니다:

  1. 정규식 추출기는 적대적 입력에서 깨집니다
  2. 샌드박싱은 안전하지 않고 느리며 자동화에 부적합합니다
  3. 대부분의 IOC 도구는 일관성이 없고 느리거나 실행 간에 미묘하게 다른 출력을 생성합니다

IOCX는 자동화, 안전성, 확장성을 위해 설계된 결정적이고 정적 분석 전용 엔진으로 이 문제를 해결합니다.


IOCX가 아닌 것

IOCX는 의도적으로 다음이 아닙니다:

  • 샌드박스
  • 행동 분석 도구
  • 에뮬레이터
  • 인리치먼트 엔진

신뢰할 수 없는 코드를 절대 실행하지 않습니다. 동적 분석을 절대 수행하지 않습니다. 안전성, 결정성, CI/CD 호환성을 위해 설계상 정적 분석 전용입니다.


설계 철학

IOCX는 레거시 도구의 가정이 아닌 현대 악성코드의 현실을 고려해 설계되었습니다.

1. 모호성보다 결정성

안정적이고 재현 가능한 출력 — 무작위성도, 변동성도 없습니다.

2. 동적 분석보다 정적 분석

실행은 안전하지 않습니다. 정적 분석은 예측 가능하고 확장 가능하며 CI 친화적입니다.

3. 적대적 우선 엔지니어링

변형된 PE, 손상된 RVA, 악의적인 문자열 — IOCX는 이들을 정상 입력으로 취급합니다.

4. 계약으로서의 스키마 안정성

하위 시스템은 업그레이드 시 절대 깨지지 않아야 합니다.

5. 타협 없는 성능

원시 텍스트에서 150–300 MB/s. 일반적인 PE에서 6–15 MB/s. 최악의 적대적 부하에서도 예측 가능합니다.


이러한 약속은 PE 구조 분석을 위한 공개된 연구 방법론에서 비롯되었습니다 — 결정적 픽스처 구성, 단일 이상 징후 원칙, 정확성의 기준으로서의 Windows 로더 동작. 전체 방법론은 docs/methodology.md에서, 더 넓은 적대적 PE 분류 체계와 상용 픽스처 제품군은 paax.dev에서 확인하세요.

IOCX를 차별화하는 요소

기능IOCX일반적인 IOC 추출기샌드박스 / 동적 도구
안전성실행 제로, 정적 전용정규식 전용, 바이너리 안전성 없음신뢰할 수 없는 코드 실행(고위험)
결정성완전히 결정적인 출력노이즈가 있으면 비결정적설계상 비결정적
바이너리 인식전체 PE 파싱, 휴리스틱바이너리 지원 없음지원하지만 안전하지 않고 느림
적대적 내성변형된 PE, 악의적 문자열 대상 테스트쉽게 우회됨종종 크래시되거나 오분류
성능150–300 MB/s(텍스트), 6–15 MB/s(PE)매우 가변적극도로 느림
CI/CD 친화성예 — 안전, 결정적, 빠름부분적아니요 — 파이프라인에 안전하지 않음
스키마 안정성보장됨드묾없음

요약하자면: IOCX는 이상적인 입력이 아닌 실제 적대적 현실을 위해 구축되었습니다.


사용 사례

CI/CD & DevSecOps

  • 릴리스 전 바이너리 스캔
  • 빌드에서 우발적 URL, IP 또는 시크릿 탐지
  • 실행 위험 제로로 보안 게이트 적용

SOC & 사고 대응

  • 경보 또는 분석가 클립보드 텍스트에서 지표 추출
  • 실행 없이 악성코드 샘플을 안전하게 검사
  • IOC를 구조화된 JSON으로 정규화

위협 인텔리전스

  • 피드를 대규모로 처리
  • 비정형 보고서 파싱
  • 결정적 출력 기반 인리치먼트 파이프라인 구축

자동화 및 스크립팅

  • 로그나 아티팩트를 IOCX로 파이프라인 처리
  • ETL 또는 배치 워크플로에 Python API 사용
  • 사용자 정의 탐지기로 확장

성능 프로파일

1. 원시 IOC 추출(텍스트, 로그, 버퍼)

150–300 MB/s 지속 처리량 빠른 경로 — PE 파싱 없음.

탐지기1 MB 시간처리량
암호화0.0037 s~270 MB/s
파일 경로0.0041 s~250 MB/s
IP0.0065 s~156 MB/s
도메인0.0035 s~300 MB/s

2. 일반적인 PE 파일(~39 KB)

  • 0.0122 s(일반적)
  • 0.0145 s(휴리스틱 사용 시)
  • 6–15 MB/s 처리량

3. 적대적 고밀도 PE(1.5 MB)

  • 0.192 s
  • ~7.6 MB/s 처리량
  • TLS 이상 징후, 구조적 이상 징후, 안티 디버그 패턴 트리거

4. 전체 엔진(비 PE)

  • 1 MB: 0.038 s

버전 주요 사항

버전 기록 보기

v0.7.6 — 구조 검증기 확장: 디버그 및 재배치 디렉터리

  • 재배치 및 디버그라는 두 가지 새로운 PE 구조 검증기
  • WIN_CERTIFICATE 및 TLS 검증기는 이제 pefile과 독립적인 전용 구조 파서에서 구조적 사실을 가져옴
  • 우선순위가 해결된 하위 사유 분류 체계를 포함한 12개의 새로운 사유 코드
  • pefile의 지연 해석에 의존하지 않는 결정적 바이트 수준 파싱
  • 100% 커버리지에서 1620개 테스트

v0.7.5 — 구조 검증기 확장

  • exports, delay-load imports, VS_VERSIONINFO, 리소스 계층 구조라는 네 가지 새로운 PE 구조 검증기
  • 우선순위가 해결된 하위 사유 분류 체계를 포함한 24개의 새로운 사유 코드
  • pefile의 지연 해석에 의존하지 않는 결정적 바이트 수준 파싱
  • 보안 관련 메타데이터 — DLL 특성, 하위 시스템/머신 이름 디코딩, 리소스별 엔트로피
  • 실제 바이너리에서 dumpbin에 대해 엔드투엔드로 검증된 100% 커버리지의 1370개 테스트

v0.7.4.1 — Windows 호환성 핫픽스

  • Windows 시스템에서 import 실패를 일으키던 python-magic 의존성 제거
  • 완전한 크로스 플랫폼 이식성을 위한 순수 Python 파일 형식 탐지기 추가
  • 엄격한 Windows 호환 PE 검증을 적용하여 PE 탐지 로직 개선
  • IOC 추출에 대한 동작 변경 없음
  • --min-length 일관성 수정은 v0.7.5에서 예정

v0.7.4 — 고급 디렉터리 파싱

  • 전체 Load Config Directory 파싱 및 검증
  • 다운스트림 휴리스틱을 위한 확장된 Optional Header 메타데이터
  • 새로운 GuardCF, cookie, 이상 징후 휴리스틱
  • 더 빠른 PE 분석
  • 테스트 스위트에 PE 픽스처 99개; 45개는 완전히 스펙 검증됨

v0.7.3 — 구조적 정확성 및 결정적 휴리스틱

  • 모든 PE 구조 검증기의 대대적 강화
  • 결정적이고 스냅샷에 안정적인 동작
  • 명확하고 일관된 ReasonCodes
  • 구조적 사실을 기반으로 구축된 더 강력한 휴리스틱

v0.7.2 — 의존성 수정

  • 누락된 idna 의존성 추가
  • 동작 또는 스키마 변경 없음

v0.7.1 — 적대적 휴리스틱 확장 및 파서 강화

  • 6가지 새로운 PE 휴리스틱
  • 확장된 적대적 PE 코퍼스
  • 강화된 도메인/URL/암호화/해시 추출기
  • 결정적 스냅샷 검증 출력

v0.7.0 — 결정적 휴리스틱 및 적대적 테스트 기반

  • 결정적 휴리스틱
  • 계층 3 적대적 샘플
  • 스냅샷 계약 테스트
  • Rich Header 크래시 수정

v0.6.0 — 안정적인 출력 스키마 및 결정적 메타데이터

  • 완전히 안정적인 JSON 스키마
  • 정규화된 PE 메타데이터
  • 공식화된 분석 수준

v0.5.0 — 분석 수준, PE 섹션 분석, 난독화 힌트

  • 새로운 분석 수준 시스템
  • PE 구조 분석
  • 난독화 휴리스틱

v0.4.0 — 플러그인 아키텍처

  • 플러그인 지원 규칙 엔진
  • 통합 탐지 흐름

v0.3.0 — 암호화 IOC 탐지

  • 이더리움 및 비트코인 지갑 탐지

v0.2.0 — 고신뢰도 IP 탐지

  • 주요 IPv4/IPv6 개선

빠른 시작

설치

pip install iocx

파일에서 IOC 추출

iocx suspicious.exe

텍스트에서 추출

echo "Visit http://bad.example.com" | iocx -

PE 분석 활성화

iocx suspicious.exe -a

Python API

from iocx.engine import Engine

engine = Engine()
results = engine.extract("suspicious.exe")
print(results)

출력 예시

IOCX는 IOC, PE 메타데이터, 섹션 분석, 휴리스틱, 난독화 지표를 포함하는 구조화된 결정적 JSON을 생성합니다.

아래 예시는 실제 적대적 PE 샘플의 출력을 요약한 것입니다. 문서화 목적으로 크기를 관리 가능하게 유지하면서 스키마의 형태와 깊이를 보여줍니다.

JSON 출력 예시 보기
{
    "file": "heuristic_rich.full.exe",
    "type": "PE",
    "iocs": {
        "urls": ["http://not-a-real-domain.test/payload"],
        "domains": ["example-malware.com"],
        "ips": ["192.0.2.123"],
        "hashes": [
            "abcd1234ef567890abcd1234ef567890",
            "1234567890",
            "3333333333333333"
        ],
        "filepaths": [
            "/usr/src/mingw-w64-11.0.1-3build1/mingw-w64-crt/crt/crtexe.c",
            "/usr/x86_64-w64-mingw32/include",
            "/usr/src/mingw-w64-11.0.1-3build1/mingw-w64-crt/crt/pseudo-reloc.c"
        ]
    },
    "metadata": {
        "file_type": "PE",
        "imports": ["KERNEL32.dll", "msvcrt.dll", "USER32.dll"],
        "sections": [
            ".text", ".data", ".rwx", ".rdata",
            "UPX0", ".pdata", ".xdata", ".tls"
        ],
        "resources": [],
        "resource_strings": [],
        "delayed_imports": [],
        "bound_imports": [],
        "exports": [],
        "signatures": [],
        "has_signature": false,
        "tls": {
            "start_address": 5368758272,
            "end_address": 5368758280,
            "callbacks": 5368754232
        },
        "header": {
            "entry_point": 5088,
            "image_base": 5368709120,
            "machine": "AMD64",
            "subsystem": "Windows GUI"
        },
        "optional_header": {
            "section_alignment": 4096,
            "file_alignment": 512,
            "size_of_image": 155648
        }
    },
    "analysis": {
        "sections": [
            { "name": ".text", "entropy": 5.92 },
            { "name": ".rwx", "entropy": 0 },
            { "name": "UPX0", "entropy": 0.34 },
            { "name": ".rdata", "entropy": 4.03 }
        ],
        "obfuscation": [
            {
                "value": "abnormal_section_layout_virtual_only",
                "category": "obfuscation_hint",
                "metadata": {
                    "section": ".bss",
                    "raw_size": 0,
                    "virtual_size": 384
                }
            }
        ],
        "extended": [
            {
                "value": "summary",
                "category": "pe_metadata",
                "metadata": {
                    "dll_count": 3,
                    "import_count": 45,
                    "resource_count": 0,
                    "has_tls": true,
                    "has_signature": false
                }
            }
        ],
        "heuristics": [
            {
                "value": "packer_suspected",
                "metadata": {
                    "reason": "packer_section_name",
                    "section": "UPX0"
                }
            },
            {
                "value": "anti_debug_heuristic",
                "metadata": {
                    "reason": "anti_debug_api_import",
                    "dll": "kernel32.dll",
                    "function": "CheckRemoteDebuggerPresent"
                }
            },
            {
                "value": "anti_debug_heuristic",
                "metadata": {
                    "reason": "timing_api_import",
                    "dll": "kernel32.dll",
                    "function": "GetTickCount"
                }
            },
            {
                "value": "pe_structure_anomaly",
                "metadata": {
                    "reason": "section_overlaps_headers",
                    "section": ".bss",
                    "raw_address": 0,
                    "size_of_headers": 1536
                }
            },
            {
                "value": "pe_structure_anomaly",
                "metadata": {
                    "reason": "data_directory_overlap",
                    "directory_a": "IMAGE_DIRECTORY_ENTRY_IMPORT",
                    "directory_b": "IMAGE_DIRECTORY_ENTRY_IAT"
                }
            }
        ]
    }
}

아키텍처

iocx/
├── examples/
├── docs/
├── tests/
└── iocx
    ├── detectors/
    ├── parsers/
    ├── plugins/
    ├── cli/
    └── analysis/

플러그인 생태계 및 확장성

IOCX는 안전하고 예측 가능하게 확장되도록 설계되었습니다. 플러그인은 **일급 시민(first-class citizens)**이며, 핵심 엔진과 동일한 결정적 스냅샷 테스트로 검증됩니다.

다음을 구축할 수 있습니다:

  • 사용자 정의 IOC 탐지기
  • 사용자 정의 정규식 규칙
  • 바이너리 인식 플러그인
  • 내부 휴리스틱
  • 파이프라인별 추출기

참조:

  • docs/specs/overlap-suppression.md
  • docs/specs/plugin-authoring-guidelines.md

생태계 개요

IOCX는 단일 바이너리를 넘어 모듈형 생태계입니다:

  • 핵심 엔진 — 결정적 IOC 추출 + PE 분석
  • 플러그인 시스템 — 사용자 정의 탐지기 및 분석 모듈
  • 적대적 코퍼스 — 변형된 PE, 악의적 문자열, 퍼즈 샘플
  • 스냅샷 테스트 프레임워크 — 결정적 출력 보장
  • 성능 벤치마크 — CI에서 적용
  • 문서 제품군 — 스펙, 계약, 플러그인 가이드

IOCX를 사용하는 곳?

IOCX는 다음 분야에서 사용됩니다:

  • DFIR 팀
  • SOC 자동화 파이프라인
  • CI/CD 보안 게이트
  • 위협 인텔리전스 플랫폼
  • 악성코드 연구소
  • 보안 엔지니어링 팀

지표를 안전하게, 결정적으로, 대규모로 추출해야 하는 모든 곳에 IOCX가 적합합니다.


안전한 테스트(악성코드 불필요)

모든 테스트 샘플은 다음 조건을 충족합니다:

  • 합성
  • 무해
  • 공개적으로 안전(EICAR, GTUBE)
  • 우발적 악성코드 취급을 방지하도록 설계됨

성능 보장

IOCX는 다음을 보장하기 위해 CI에서 엄격한 성능 임계값을 적용합니다:

  • 정규식 역추적(backtracking) 지연 없음
  • 병적 성능 저하 없음
  • 릴리스 간 안정적인 성능

참조:

  • docs/performance.md

프로젝트 정체성 및 명명

IOCX라는 이름은 다음에 게시된 공식 엔진만을 가리킵니다:

허용되지 않음

  • iocx라는 이름의 저장소
  • 이 프로젝트에 속하지 않는 "iocx"라는 이름의 도구
  • 허가 없이 관련성을 암시하는 행위

허용됨

  • iocx-<plugin>
  • iocx-extension-<name>
  • iocx-detector-<feature>

공식 IOCX 저장소


로드맵

IOCX 개발은 안정성, 확장성, 더 깊은 정적 분석 범위에 중점을 둡니다. 아래 항목은 진행 중이거나 탐구 중인 작업 영역을 나타냅니다.

  • 확장된 PE 휴리스틱(지연 로드 동작, 구조적 이상 징후, 재배치 패턴)
  • OSINT, DFIR, 위협 인텔리전스 워크플로를 위한 선택적 억제 규칙
  • ELF 및 Mach-O 메타데이터 추출
  • 다중 아티팩트 워크플로를 위한 배치 분석 모드
  • YARA 스타일 출력 모드 및 인리치먼트 후크
  • 바이너리 무관 정적 분석
  • 크로스 플랫폼 플러그인 생태계
  • Rust, Go, Node.js용 언어 바인딩

기여

다음을 환영합니다:

  • 새로운 탐지기
  • 파서 개선
  • 문서 업데이트
  • 합성 적대적 샘플

지침은 CONTRIBUTING.md를 참조하세요.


보안

보안 문제를 발견한 경우 GitHub 이슈를 열지 마세요. SECURITY.md의 지침을 따르세요.


라이선스

MPL‑2.0 라이선스 — LICENSE 참조.

카테고리