
Mitre ATT&CK Framework와 상호작용하는 Python 패키지
.______ ____ ____ ___ .___________.___________. ______ __ ___
| _ \ \ \ / / / \ | | | / || |/ /
| |_) | \ \/ / / ^ \ `---| |----`---| |----`| ,----'| ' /
| ___/ \_ _/ / /_\ \ | | | | | | | <
| | | | / _____ \ | | | | | `----.| . \
| _| |__| /__/ \__\ |__| |__| \______||__|\__\
MITRE ATT&CK 프레임워크와 상호작용하는 Python 패키지
현재 버전: 7.1.1
pyattck은 MITRE ATT&CK 프레임워크를 위한 경량 프레임워크입니다. 이 패키지는 MITRE Enterprise, PRE-ATT&CK, Mobile 및 ICS 프레임워크에서 세부 정보를 추출합니다.
pyattck은 조직과 개인이 MITRE ATT&CK 프레임워크(들)에 프로그래밍 방식으로 접근할 수 있도록 돕습니다. 즉, 명령줄 유틸리티를 통해 또는 자신의 코드 베이스에 포함시켜 Enterprise, Mobile, Pre-Attck 및 ICS 프레임워크에서 정의된 모든 행위자, 악성코드, 완화, 전술, 기술 및 도구에 접근할 수 있습니다.
이 데이터를 자동화된(스크립트/코드) 방식으로 접근하려는 이유는 많지만 몇 가지 예는 다음과 같습니다:
pyattck이 제공하는 다른 이점으로 추가 컨텍스트 데이터를 제공할 수 있다는 점이 있습니다. 이 데이터에 대한 자세한 내용은 여기에서 확인할 수 있지만 기본적으로 pyattck은 여러 오픈 소스 저장소를 활용하여 추가 컨텍스트 데이터(예: 기술 실행에 사용된 명령, 악의적인 행위자의 국가 및 기타 세부 정보, 정의된 도구/악성코드와 유사한 다른 변종 악성코드 등)를 수집합니다.
이러한 추가 컨텍스트가 pyattck을 진정으로 강력하게 만들며, 사람들이 자신의 탐지 규칙을 더욱 견고하게 테스트하고 검증하며, 테스트 가정을 검증할 수 있게 해줍니다. 실제로 pyattck이 블루, 레드, 퍼플 팀이 조직(그리고 그들 자신)을 방어하는 데 활용될 수 있는 방법은 무수히 많습니다.
pyattck 패키지는 MITRE ATT&CK 프레임워크에서 모든 전술, 기술, 행위자, 악성코드, 도구 및 완화를 가져오며, MITRE ATT&CK 데이터셋 내에서 정의된 모든 관계(하위 기술 포함)도 가져옵니다.
또한, 기술, 행위자 및 도구(해당되는 경우)는 이제 다양한 속성을 통해 접근할 수 있는 서드파티 리소스에서 수집된 데이터를 갖습니다. 이러한 기능에 대한 자세한 내용은 외부 데이터셋을 참조하세요.
pyattck 패키지를 통해 다음을 수행할 수 있습니다:
pyattck은 OS X, Linux 또는 Windows에 설치할 수 있습니다. 소스에서 직접 설치할 수도 있습니다. 설치하려면 해당 운영 체제 헤더 아래의 명령을 참조하세요.
pip install pyattck
git clone https://github.com/swimlane/pyattck.git
cd pyattck
python setup.py install
pyattck을 사용하려면 Attck 객체를 인스턴스화해야 합니다. 각 클래스를 직접 상호작용할 수 있지만, 의도된 사용법은 Attck 객체를 통하는 것입니다:
from pyattck import Attck
attack = Attck()
기본적으로 하위 기술은 각 기술 객체 아래에서 접근 가능합니다. Attck 객체를 생성할 때 nested_techniques=False를 전달하여 이 동작을 비활성화할 수 있습니다.
예를 들어, 기본 동작은 다음과 같습니다:
from pyattck import Attck
attack = Attck()
for technique in attack.enterprise.techniques:
print(technique.id)
print(technique.name)
for subtechnique in technique.techniques:
print(subtechnique.id)
print(subtechnique.name)
Attck 객체에서 다음 주요 속성에 접근할 수 있습니다:
MITRE ATT&CK 프레임워크를 지정하면 추가 속성에 접근할 수 있습니다.
Enterprise 속성에서 접근 가능한 객체:
enterprise 속성의 객체 유형에 대한 자세한 내용은 Enterprise를 참조하세요.
PreAttck 속성에서 접근 가능한 객체:
preattck 속성의 객체 유형에 대한 자세한 내용은 PreAttck을 참조하세요.
Mobile 속성에서 접근 가능한 객체:
mobile 속성의 객체 유형에 대한 자세한 내용은 Mobile을 참조하세요.
ICS 속성에서 접근 가능한 객체:
ics 속성의 객체 유형에 대한 자세한 내용은 ICS를 참조하세요.
pyattck 내의 새로운 대화형 메뉴 시스템을 사용하려면 interactive를 True로 설정해야 합니다. 그러면 대화형 콘솔 메뉴 시스템이 실행됩니다.
스크립트를 사용하여 다음을 실행하여 실행할 수 있습니다:
from pyattck import Attck
Attck(interactive=True)
또는 명령줄에서 대화형 모드를 실행할 수도 있습니다:
pyattck --interactive
아래의 gif 예제를 확인하세요:

pyattck은 외부 데이터를 저장할지 여부와 저장 위치를 구성할 수 있습니다.
from pyattck import Attck
attck = Attck(
nested_techniques=True,
use_config=False,
save_config=False,
config_file_path='~/pyattck/config.yml',
data_path='~/pyattck/data',
enterprise_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_enterprise_attck_v1.json",
pre_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_pre_attck_v1.json",
mobile_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_mobile_attck_v1.json",
ics_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_ics_attck_v1.json",
nist_controls_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_nist_controls_v1.json",
generated_nist_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/attck_to_nist_controls.json",
**kwargs
)
기본적으로 pyattck은 (이제) HTTP GET 요청을 사용하여 각각의 위치에서 최신 외부 데이터를 가져옵니다. pyattck은 현재 다음 위치에서 데이터를 가져옵니다:
Attck 객체를 인스턴스화할 때 여러 옵션이 있습니다. 4.0.0부터 다음 옵션을 지정할 수 있습니다:
True로 지정하면 pyattck은 config_file_path 위치에 지정된 설정을 검색하려고 시도합니다. 이 파일이 손상되었거나 찾을 수 없는 경우, 지정된 *_attck_json 위치에서 데이터를 검색하는 기본값으로 되돌아갑니다.True로 지정하면 pyattck은 설정 파일을 config_file_path로 설정된 위치에 저장합니다. 또한 다운로드된 모든 파일을 지정된 data_path 위치에 저장합니다. *_attck_json 매개변수 중 하나에 다운로드 URL 대신 로컬 경로를 지정한 경우, 이 위치를 설정에 저장하고 이후에 이 위치를 참조합니다.~/pyattck/config.yml입니다.~/pyattck/data입니다.또한 각 개별 *_attck_json 파일의 위치를 URI 또는 로컬 파일 경로로 전달하여 지정할 수 있습니다. 로컬 파일 경로를 전달하면 해당 파일을 읽기만 합니다.
기본값을 사용했거나 이러한 JSON 파일을 검색할 대체 URI 위치를 지정한 경우, HTTP 요청을 수행할 때 Requests Python 패키지에 전달될 **kwargs를 추가로 전달할 수 있습니다.
매일 새로운 오픈 소스 프로젝트가 출시된다는 것을 알고 있지만, 우리는 사용자가 MITRE ATT&CK 프레임워크의 모든 수직 간 알려진 관계를 식별할 수 있도록 간단한 Python 패키지를 제공하고 싶었습니다.
MITRE ATT&CK 프레임워크에 익숙하지 않다면, 반드시 이해해야 할 몇 가지 핵심 구성 요소가 있습니다. 첫 번째는 전술과 기술입니다. MITRE ATT&CK 프레임워크를 보면 전술은 열이며 공격의 다양한 단계를 나타냅니다.
MITRE ATT&CK 프레임워크는 모든 것을 포괄하는/사실상의 보안 커버리지 맵이 아닙니다. 이는 프레임워크이며 보안 상태를 평가할 때 추가적인 방안도 고려해야 합니다.
기술은 프레임워크의 행이며 특정 전술(열) 아래에 분류됩니다. 이는 보안 격차를 평가할 때 지침을 제공하는 프레임워크 내의 데이터 포인트입니다. 또한 (대부분의) 기술은 완화 지침과 함께 기록된 공격 중 이 기술을 사용한 도구, 악성코드, 심지어 행위자/그룹과의 관계에 대한 정보를 포함합니다.
즉, 조직이 특정 행위자/그룹이 사용한 TTP(전술, 기술, 절차)에 초점을 맞추고 있다면 MITRE ATT&CK 프레임워크가 적합합니다. 조직의 보안 성숙도가 아직 그 단계에 이르지 못했다면 걱정하지 마세요! ATT&CK 프레임워크는 여전히 간단하고 직관적인 레이아웃으로 매우 좋은 지침을 제공하지만, 프로그래밍 방식으로는 직관적이지 않습니다. 특히 프레임워크를 사용하여 보안 컨트롤을 측정(또는 매핑)하려는 경우에는 더욱 그렇습니다.
개발 환경에서 기능이나 버그를 추가하거나 코드를 실행할 수 있습니다.
개발 및 테스트 환경을 설정하려면 이 Dockerfile을 사용하세요.
Dockerfile을 사용하려면 이 저장소 디렉토리로 이동하여 다음을 실행하세요:
docker build --force-rm -t pyattck .
docker run pyattck
이 명령은 bin/test.py의 테스트 Python 파일을 호출합니다.
이 프로젝트의 테스트는 사용 가능한 모든 속성과 메서드를 다루어야 합니다. 이 프로젝트가 성장함에 따라 테스트는 더욱 견고해지겠지만, 현재로서는 존재 여부와 출력을 반환하는지 테스트하고 있습니다.
기여 방법 및 풀 리퀘스트 제출 절차에 대한 자세한 내용은 CONTRIBUTING.md를 참조하세요.
버전 관리에는 SemVer를 사용합니다.
pyattck의 특정 버전 기능에 대한 자세한 내용은 CHANGELOG.md를 참조하세요.
기여자 목록도 확인하세요.
이 프로젝트는 MIT License에 따라 라이선스가 부여됩니다.
먼저, 오픈 소스 프로젝트에 기여하는 모든 분들, 특히 이러한 프로젝트의 관리자와 창작자에게 감사드립니다. 그분들이 없었다면 이 기능은 불가능했을 것입니다.
이 데이터 세트는 다양한 출처에서 생성됩니다. 더 많은 출처를 추가함에 따라 계속해서 여기에 추가할 것입니다. 다시 한 번 모든 프로젝트에 감사드립니다. 특별한 순서 없이 pyattck은 다음 프로젝트의 데이터를 활용합니다:
.. toctree::
:titlesonly:
configuration
pyattck/attck
Dataset <https://github.com/swimlane/pyattck-data>
Data Models <https://github.com/swimlane/pyattck-data>
enterprise/enterprise
preattck/preattck
mobile/mobileattck
ics/icsattck