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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/pedramamini/iocextract
Indicator of Compromise (IOC) ManagementOSINT (Open Source Intelligence)Threat Feeds & AggregatorsForensicsInformation GatheringMalware AnalysisDigital ForensicsThreat Intelligence
GitHubpedramamini/iocextract

iocextract

무해화된 침해 지표(IOC) 추출기.

저장소 보기
5849242년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

iocextract

Developed by InQuest Build Status 문서 상태 PyPI 버전

침해 지표 (IOC) 추출기로, 가장 흔히 수집되는 아티팩트 중 일부를 대상으로 합니다.

목차

  • 개요
    • 문제점
    • 해결 방법
    • 사용 예시
  • 설치
  • 사용법
    • 라이브러리
    • 명령줄 인터페이스
  • 유용한 정보
    • FAQ
    • 상세 정보
    • 사용자 정의 정규식
    • 관련 프로젝트
    • 기여하기

개요

iocextract 패키지는 텍스트 코퍼스에서 URL, IP 주소, MD5/SHA 해시, 이메일 주소, YARA 규칙을 추출하기 위한 라이브러리 및 명령줄 인터페이스(CLI)입니다. 인코딩되거나 "defanged"된 IOC를 추출하고, 선택적으로 디코딩하거나 refang 할 수 있습니다.

문제점

악성코드 분석가나 엔드포인트 소프트웨어가 실시간 악성 콘텐츠에 대한 우발적 노출을 방지하기 위해 URL, IP 주소 등의 IOC를 "defang"하는 것은 일반적인 관행입니다. 이러한 IOC를 추출하고 집계하는 것은 분석가에게 종종 유용합니다. 안타깝게도 기존의 "IOC 추출" 도구는 표준 정규식에 포착되지 않아 이러한 IOC를 그냥 지나치는 경우가 많습니다.

예를 들어, 점을 대괄호로 감싸는 간단한 defang 기법:

root@kitploit:~
127[.]0[.]0[.]1

간단한 IP 주소 정규식을 사용하는 기존 도구는 이 IOC를 완전히 무시합니다.

해결 방법

특수하게 제작된 정규식과 사용자 정의 후처리를 결합하여 "defanged"된 IOC를 감지하고 난독화를 해제할 수 있습니다. 이는 분석가가 수동으로 IOC를 찾아 기계가 읽을 수 있는 형식으로 변환해야 하는 수고를 덜어 시간과 노력을 절약해 줍니다.

사용 예시

많은 트위터 사용자가 defanged된 URL과 함께 C2 또는 기타 유용한 IOC 정보를 게시합니다. 예를 들어, @InQuest의 이 트윗:

root@kitploit:~
Recommended reading and great work from @unit42_intel:
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/ ...
InQuest customers have had detection for threats delivered from hotfixmsupload[.]com
since 6/3/2017 and cdnverify[.]net since 2/1/18.

이것을 추출기에 통과시키면 URL을 쉽게 뽑아낼 수 있습니다:

root@kitploit:~
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/
hotfixmsupload[.]com
cdnverify[.]net

추출 시 refang=True를 전달하면 난독화가 제거되지만, 이는 실제 IOC이므로 문서에서는 defanged 상태로 두겠습니다.

설치

regex 의존성을 설치하려면 Python 개발 헤더를 설치해야 할 수도 있습니다. Ubuntu/Debian 계열 시스템에서는 다음을 시도하세요:

root@kitploit:~
sudo apt-get install python-dev

그런 다음 pip에서 iocextract를 설치하세요:

root@kitploit:~
pip install iocextract

Windows에서 설치에 문제가 있으면 PyPI에서 적절한 wheel을 다운로드하여 pip로 직접 regex를 설치해 보세요:

root@kitploit:~
pip install regex-2018.06.21-cp27-none-win_amd64.whl

사용법

라이브러리

defanged된 URL을 추출해 보세요:

root@kitploit:~
import iocextract

content = \
"""
I really love example[.]com!
All the bots are on hxxp://example.com/bad/url these days.
C2: tcp://example[.]com:8989/bad
"""

for url in iocextract.extract_urls(content):
    print(url)

    # 출력

    # hxxp://example.com/bad/url
    # tcp://example[.]com:8989/bad
    # example[.]com
    # tcp://example[.]com:8989/bad

참고: 일부 URL이 여러 정규식에 걸려 두 번 나타날 수 있습니다.

원한다면 "refang"하거나 IOC에서 일반적인 난독화 방법을 제거할 수도 있습니다:

root@kitploit:~
import iocextract

for url in iocextract.extract_urls(content, refang=True):
    print(url)

    # 출력

    # http://example.com/bad/url
    # http://example.com:8989/bad
    # http://example.com
    # http://example.com:8989/bad

추출된 IOC를 전혀 defang하지 않으려면 이 기능을 비활성화할 수도 있습니다:

root@kitploit:~
import iocextract

content = \
"""
http://example.com/bad/url
http://example.com:8989/bad
http://example.com
http://example.com:8989/bad
"""

for url in iocextract.extract_urls(content, defang=False):
    print(url)

    # 출력

    # http://example.com/bad/url
    # http://example.com:8989/bad
    # http://example.com
    # http://example.com:8989/bad

이 라이브러리의 모든 extract_* 함수는 리스트가 아닌 이터레이터를 반환합니다. 이 동작의 장점은 iocextract가 매우 큰 입력도 오버헤드가 매우 낮게 처리할 수 있다는 점입니다. 하지만 어떤 이유로 IOC를 두 번 이상 반복해야 한다면 결과를 리스트로 저장해야 합니다:

root@kitploit:~
import iocextract

content = \
"""
I really love example[.]com!
All the bots are on hxxp://example.com/bad/url these days.
C2: tcp://example[.]com:8989/bad
"""

print(list(iocextract.extract_urls(content)))
# ['hxxp://example.com/bad/url', 'tcp://example[.]com:8989/bad', 'example[.]com', 'tcp://example[.]com:8989/bad']

명령줄 인터페이스

명령줄 도구도 포함되어 있습니다:

root@kitploit:~
$ iocextract -h
    usage: iocextract [-h] [--input INPUT] [--output OUTPUT] [--extract-emails]
                  [--extract-ips] [--extract-ipv4s] [--extract-ipv6s]
                  [--extract-urls] [--extract-yara-rules] [--extract-hashes]
                  [--custom-regex REGEX_FILE] [--refang] [--strip-urls]
                  [--wide]

    고급 침해 지표(IOC) 추출기. 인수를 지정하지 않으면 기본적으로 모든 IOC를 추출합니다.

    선택적 인수:
      -h, --help            이 도움말 메시지를 표시하고 종료
      --input INPUT         기본값: stdin
      --output OUTPUT       기본값: stdout
      --extract-emails
      --extract-ips
      --extract-ipv4s
      --extract-ipv6s
      --extract-urls
      --extract-yara-rules
      --extract-hashes
      --custom-regex REGEX_FILE 각 줄에 하나의 캡처 그룹이 있는 사용자 정의 정규식 문자열 파일
      --refang              기본값: no
      --strip-urls          URL 끝에서 가능한 쓰레기 제거. 기본값: no
      --wide                와이드 인코딩 문자 일치를 위해 입력 전처리. 기본값: no

참고: URL, 이메일, IPv4 주소만 "refang"할 수 있습니다.

유용한 정보

FAQ

질문:

Q. 트윗이나 블로그 글 내용과 같은 일반 텍스트에서 defang되었을 가능성이 있는 IOC를 추출하는 경우인가요?

A. 네! 이것이 바로 iocextract가 설계된 용도이며, 가장 뛰어난 성능을 발휘하는 곳입니다. 더 나아가 자동으로 추출 및 저장을 자동화하고 싶다면 ThreatIngestor를 확인해 보세요.

Q. 16진수 또는 base64로 인코딩된 URL을 추출하는 경우인가요?

A. 네, 하지만 CLI가 최상의 결과를 제공하지 않을 수 있습니다. Python 스크립트를 작성하고 iocextract.extract_encoded_urls를 직접 호출해 보세요.

참고: URL 끝에 추가 쓰레기가 남을 가능성이 높습니다.

Q. HTML/XML/RTF에서 defang되지 않은 IOC를 추출하는 경우인가요?

A. 가능하지만, --strip-urls CLI 플래그(또는 라이브러리에서 strip=True 매개변수)를 사용하는 것을 고려해야 하며, 여전히 출력에 쓰레기가 포함될 수 있습니다. HTML에서 추출하는 경우 Beautiful Soup과 같은 도구를 사용하여 먼저 텍스트 콘텐츠를 분리한 다음 iocextract에 전달하는 것을 고려하세요. 이 예제를 참조하세요.

Q. 실행 파일이나 매우 큰 입력과 같은 바이너리 데이터에서 defang되지 않은 IOC를 추출하는 경우인가요?

A. 라이브러리로 실행할 때 매우 단순한 버전을 사용할 수 있지만, defang=False 매개변수가 필요하며 일부 IOC를 놓칠 수 있습니다. iocextract의 정규식은 defang된 IOC를 잡기 위해 유연하게 설계되었습니다. 필요한 정보를 수집할 수 없는 경우 Cacador와 같은 도구를 대신 사용하는 것을 고려하세요.

상세 정보

이 라이브러리는 현재 다음 IOC를 지원합니다:

  • IP 주소
    • IPv4 완전 지원
    • IPv6 부분 지원
  • URL
    • 프로토콜 지정자 포함: http, https, tcp, udp, ftp, sftp, ftps
    • 프로토콜 지정자 없이도 [.] 앵커 포함
    • IPv4 및 IPv6(RFC2732) URL 지원
    • 프로토콜 지정자( http, https, ftp)가 있는 16진수 인코딩 URL
    • 프로토콜 지정자( http, https, ftp, ftps, sftp)가 있는 URL 인코딩 URL
    • 프로토콜 지정자( http, https, ftp)가 있는 Base64 인코딩 URL
  • 이메일
    • 부분 지원, @ 또는 at에 고정
  • YARA 규칙
    • imports, includes, comments 포함
  • 해시
    • MD5
    • SHA1
    • SHA256
    • SHA512
  • 전화번호
  • 사용자 정의 정규식
    • 정확히 하나의 캡처 그룹 포함

IPv4 주소의 경우 다음 defang 기법이 지원됩니다:

이메일 주소의 경우 다음 defang 기법이 지원됩니다:

URL의 경우 다음 defang 기법이 지원됩니다:

참고: 위 표는 완전하지 않으며, 다른 URL/defang 패턴도 올바르게 추출될 수 있습니다. 누락되거나 올바르게 작동하지 않는 부분이 있으면 GitHub Issues를 통해 알려주세요.

base64 정규식은 @deadpixi의 base64 정규식 도구를 사용하여 생성되었습니다.

사용자 정의 정규식

CLI를 사용하여 사용자 정의 정규식으로 IOC를 추출하려면 각 줄에 하나의 정규식 문자열이 있는 일반 텍스트 파일을 만들고 --custom-regex 플래그로 전달하세요. 각 정규식 문자열에 정확히 하나의 캡처 그룹이 포함되어 있는지 확인하세요.

예를 들어:

root@kitploit:~
http://(example\.com)/
(?:https|ftp)://(example\.com)/

이 사용자 정의 정규식 파일은 일치하는 URL에서 도메인 example.com을 추출합니다. (?: ) 비캡처 그룹은 일치 결과에 포함되지 않습니다.

전체 일치를 추출하려면 정규식 문자열 전체를 괄호로 묶으세요. 예:

root@kitploit:~
(https?://.*?.com)

정규식이 유효하지 않으면 다음과 같은 오류 메시지가 표시됩니다:

root@kitploit:~
Error in custom regex: missing ) at position 5

정규식에 캡처 그룹이 포함되지 않으면 다음과 같은 오류 메시지가 표시됩니다:

root@kitploit:~
Error in custom regex: no such group

사용자 정의 정규식을 사용할 때는 항상 단일 캡처 그룹을 사용하세요. 간단한 예:

root@kitploit:~
[
    r'(my regex)',  # 패턴이 일치하면 'my regex'를 반환
    r'my (re)gex',  # 패턴이 일치하면 're'를 반환
]

둘 이상의 캡처 그룹을 사용하면 예기치 않은 결과가 발생할 수 있습니다. 다음 예를 확인하세요:

root@kitploit:~
[
    r'my regex',  # 아무것도 반환하지 않음
    r'(my) (re)gex',  # 패턴이 일치하면 'my'를 반환
]

왜일까요? 결과는 항상 각 정규식의 첫 번째 그룹 일치만 반환하기 때문입니다.

더 복잡한 정규식 쿼리의 경우 캡처 그룹과 비캡처 그룹을 다음과 같이 결합할 수 있습니다:

root@kitploit:~
[
    r'(?:my|your) (re)gex',  # 패턴이 일치하면 're'를 반환
]

이제 비캡처 그룹을 위한 (?: ) 구문과 캡처 그룹을 위한 ( ) 구문을 비교할 수 있습니다.

관련 프로젝트

iocextract가 사용 사례에 맞지 않는다면 유사한 프로젝트가 여러 개 존재합니다. GitHub에서 defang 및 indicators-of-compromise 태그를 확인하세요. 또한:

  • Go: Cacador
  • JavaScript: ioc-extractor
  • Python: Cyobstract

IOC 추출, 보강, 내보내기 등을 자동화하려면 ThreatIngestor를 확인하세요.

YARA 규칙을 작업 중이라면 plyara에 관심이 있을 수 있습니다.

기여하기

추출기를 통과하지 못하는 defang 기법이 있거나 버그를 발견하면 Pull Request와 Issue를 언제든지 환영합니다. 라이브러리는 GPL-2.0 라이선스로 배포됩니다.

iocextract를 사용하는 곳

  • InQuest
  • PacketTotal

사용 중이신가요? 귀하의 사이트가 이 목록에 포함되길 원하시나요? 알려주세요!

도구 다운로드
기법DefangedRefanged
. -> [.]1[.]1[.]1[.]11.1.1.1
. -> (.)1(.)1(.)1(.)11.1.1.1
. -> \.1\.1\.1\.11.1.1.1
부분1[.1[.1.]11.1.1.1
임의 조합1.)1[.1.)11.1.1.1
기법DefangedRefanged
. -> [.]me@example[.]com[email protected]
. -> (.)me@example(.)com[email protected]
. -> {.}me@example{.}com[email protected]
. -> _dot_me@example dot com[email protected]
@ -> [@]me[@]example.com[email protected]
@ -> (@)me(@)example.com[email protected]
@ -> {@}me{@}example.com[email protected]
@ -> _at_me at example.com[email protected]
부분me@} example[.com[email protected]
공백 추가me@example [.] com[email protected]
임의 조합me @example [.)com[email protected]
기법DefangedRefanged
. -> [.]example[.]com/pathhttp://example.com/path
. -> (.)example(.)com/pathhttp://example.com/path
. -> \.example\.com/pathhttp://example.com/path
부분http://example[.com/pathhttp://example.com/path
/ -> [/]http://example.com[/]pathhttp://example.com/path
Cisco ESAhttp:// example .com /pathhttp://example.com/path
:// -> __http__example.com/pathhttp://example.com/path
:// -> :\\http:\\example.com/pathhttp://example.com/path
: -> [:]http[:]//example.com/pathhttp://example.com/path
hxxphxxp://example.com/pathhttp://example.com/path
임의 조합hxxp__ example( .com[/]pathhttp://example.com/path
16진수 인코딩687474703a2f2f6578616d706c652e636f6d2f70617468http://example.com/path
URL 인코딩http%3A%2F%2fexample%2Ecom%2Fpathhttp://example.com/path
Base64 인코딩aHR0cDovL2V4YW1wbGUuY29tL3BhdGgKhttp://example.com/path