
바이너리, 소스 및 스크립트를 위한 0-day 악성코드 탐지 (별로 안 별로인 것)
Atomdrift Scan은 소프트웨어 공급망을 대상으로 하는 0-day 공격을 탐지하도록 설계된 현대적인 ML 기반 멀웨어 스캐너입니다.
결정론적이고 빠르며 유연하도록 설계되었고, 여러분이 염두에 둔 어떤 워크플로나 보안 도구에도 임베드할 수 있으며, 파일, 아카이브, URL, PURL 또는 프로세스를 대상으로 동작할 수 있습니다.
2026년 9월 기준으로 Atomdrift Scan은 98%의 0-day 탐지율을 기록하며, 상용이든 오픈소스든 다른 어떤 스캐너보다 34% 앞서 있습니다.
Atomdrift가 어떻게 이렇게 뛰어난 결과를 얻을까요? 첫째, 다른 어떤 스캐너보다 더 넓은 범위를 커버합니다:
가장 중요한 점은, 새로운 샘플, 블로그, 기술 문서를 대상으로 강화 학습을 사용해 규칙이 지속적으로 갱신되어 매일 약 1000개의 규칙이 업데이트된다는 것입니다.
UNIX 계열 호스트(macOS, Linux, BSD, Solaris, illumos, Android)를 사용하는 경우:
curl -fsSL https://install.atomdrift.org/scan.sh | sh
Windows를 사용하는 경우:
irm https://install.atomdrift.org/scan.ps1 | iex
또는 Rust가 설치되어 있고 소스에서 직접 빌드하고 싶다면:
make install
더 깊은 바이너리 분석이 필요하다면 7-Zip, rizin, upx, innoextract도 설치해야 합니다.
Windows에서는 winget을 사용하세요:
winget install --exact --id 7zip.7zip
winget install --exact --id Rizin.Rizin
winget install --exact --id UPX.UPX
winget install --exact --id dscharrer.innoextract
Unix 계열 시스템에서는 p7zip 대신 업스트림 7-Zip(brew install sevenzip, apt install 7zip)을 설치하세요 — p7zip의 7z는 APFS를 읽을 수 없어 .dmg 내용이 스캔되지 않습니다.
# 파일, 디렉터리 또는 아카이브를 재귀적으로 스캔:
atomscan ./project
atomscan release.tgz
# 레지스트리에서 패키지를 가져와 스캔.
atomscan purl npm/[email protected]
# URL을 가져와 스캔.
atomscan url https://example.com/download
# 실험적 기능: 실행 중인 프로세스 실행 파일을 스캔하거나 더 넓은 호스트를 트리아지
atomscan ps
atomscan sys
# 프로그래밍 방식 접근을 위한 JSON 출력
atomscan -f json ./project
종료 코드 덕분에 CI 통합이 간단해집니다:
0: 모든 샘플이 정상1: 악성 샘플 탐지2: 의심스러운 샘플 탐지3: 분석 오류4: 규칙 세트가 불완전함 — 트레이트 세트가 정의한 것보다 적은 규칙으로 스캔이 실행되었으므로, 악성 판정이 아닌 한 아무것도 증명하지 못합니다. 다시 실행하세요.
atomscan은 절대 텔레메트리 데이터를 전송하지 않습니다. 다만 두 가지 이유로 인터넷에 접속합니다:
--no-update 또는 SCAN_NO_UPDATE_CHECK=1로 비활성화할 수 있습니다--follow=none을 설정하세요.다른 멀웨어 스캐너와 달리, Atomdrift는 -l 플래그를 사용해 허용 가능한 오탐 수준의 관점에서 민감도를 조정할 수 있게 해줍니다:
-l0: 엄격, 오탐이 관측되지 않은 지점으로 신뢰도 컷오프를 설정합니다.-l25: 기본 배포 지점: 1억 개 파일당 25건의 오탐.-l1000: 완화, 대략 10만 개 파일당 1건의 오탐.참고: 1억 개의 샘플이 없는 파일 형식의 경우, 관측된 오탐률이 요청한 수준의 최대 5-6배에 이를 수 있습니다. 결과는 다를 수 있습니다.
확률 임계값을 직접 미세 관리하고 싶은 사용자를 위해 원시 --threshold-hostile 및 --threshold-suspicious 재정의가 제공되지만, 이 수치는 안정성이 보장되지 않으며 이 플래그들은 -l과 함께 사용할 수 없습니다.
추가 해석을 위해 사용자는 --llm 플래그를 통해 LLM에 대한 접근을 제공할 수 있습니다. 이 플래그는 두 가지 목적을 수행합니다:
기본적으로 atomscan은 해석된 증거(원본 파일이 아님)를 http://localhost:8000/v1로 전송합니다 — Ollama나 vLLM 같은 로컬 서비스와 함께 사용하기 위한 것이지만, Claude, ChatGPT, DeepSeek 같은 원격 서비스를 사용하도록 설정할 수도 있습니다.
모델은 하드코딩되어 있지 않습니다: --llm-model을 전달하지 않으면 atomscan은 엔드포인트에 제공하는 모델을 물어보고 나열된 것 중 가장 큰 것을 사용합니다. Qwen/Qwen3.8-27B를 서빙할 것을 권장합니다.
엔드포인트가 베어러 토큰을 요구하는 경우, ~/.tok/llm(모드 0600)에 넣으면 atomscan이 자동으로 전송합니다; --llm-key와 SCAN_LLM_KEY가 해당 파일을 재정의합니다.
--llm은 또한 순서대로 시도되는 쉼표로 구분된 페일오버 체인을 받습니다 — --llm 'https://llm.isotope13.ai/v1,openrouter'는 자체 엔드포인트에서 채점하고 응답할 수 없을 때만 과금되는 엔드포인트로 접근합니다.
atomscan --llm ./project
atomscan --llm http://model-host:8000/v1 --llm-model my-model ./project
atomscan --llm openrouter --llm-model qwen/qwen3.8-27b ./project
--llm openrouter는 https://openrouter.ai/api/v1과 통신합니다. 키는 --llm-key, SCAN_LLM_KEY 또는 ~/.tok/openrouter(첫 번째 비어 있지 않은 줄)에서 가져옵니다. --llm-model은 생략 시 openrouter/auto(OpenRouter 자체의 자동 라우터)로 기본 설정됩니다 — 카탈로그의 나머지는 자동 선택되지 않습니다.
Linux make deploy는 동일한 이름을 받습니다: LLM=openrouter(또는 LLM_URL=openrouter), 그리고 openrouter/auto 대신 모델을 고정하려는 경우에만 LLM_MODEL=qwen/qwen3.8-27b. 유닛은 운영자 홈을 읽을 수 없으므로(ProtectHome=true), 배포 스크립트가 ~/.tok/openrouter를 서비스 상태 디렉터리로 복사합니다.
스캐너는 100개 이상의 파일 및 컨테이너 유형을 인식합니다. 대표적인 커버리지는 다음과 같습니다:
규칙 세트에는 Linux, macOS, Windows, Android, iOS, BSD 계열, AIX, Solaris, QNX, z/OS, ESXi, OpenWrt, VxWorks, RouterOS, FortiOS, PAN-OS, IOS-XE, Junos, NetScaler 및 Ivanti 어플라이언스에 대한 플랫폼별 동작이 포함되어 있습니다.
기본 빌드 매트릭스는 여러 CPU 아키텍처에 걸쳐 Linux, macOS, FreeBSD, OpenBSD, NetBSD, illumos, Solaris 및 Windows를 커버합니다. 테스트 깊이는 대상에 따라 다릅니다; 현재 매트릭스는 빌드 워크플로를 참조하세요.
Atomdrift Scan은 Apache License 2.0에 따라 제공됩니다.
모든 기여를 환영합니다!
| 카테고리 | 형식 |
|---|
| 바이너리 및 바이트코드 | Mach-O, ELF, PE, WebAssembly, Android DEX, Java .class, Python .pyc, BEAM |
| 소스 | Python, JavaScript, TypeScript, Go, Rust, Java, C, C++, C#, Ruby, PHP, Perl, Lua, Swift, Objective-C, Kotlin, Scala, Groovy, Zig, Elixir, Clojure, Shell, PowerShell, Batch, VBScript, AppleScript, JCL |
| 빌드, 매니페스트 및 잠금 파일 | package.json, package-lock.json, Cargo.toml, Cargo.lock, pyproject.toml, requirements.txt, Poetry, Pipenv, Composer, Yarn, pnpm, Go modules, binding.gyp, GitHub Actions, systemd units, Makefile, Dockerfile |
| 아카이브 및 디스크 이미지 | ZIP, TAR, gzip, bzip2, XZ, zstd, 7-Zip, RAR, CAB, ASAR, DMG, ISO |
| 패키지 및 컨테이너 | deb, rpm, APK, npm, wheel, egg, sdist, gem, crate, conda, NuGet, IPA, CRX, XPI, VSIX, OCI/Docker images, FreeBSD, Arch, Void, and Gentoo packages |
| 문서 및 데이터 | OLE2, OOXML, OpenDocument, PDF, RTF, Markdown, HTML, XML, SVG, plist, JPEG, PNG, LNK, CHM, Python pickle |