
자동화된 전술, 기술 및 절차
자동화된 전술, 기법 및 절차. 회귀 테스트, 제품 평가, 연구자를 위한 데이터 생성 등을 위해 복잡한 시퀀스를 수동으로 재실행하는 것은 지루할 수 있습니다. 저는 Empire (또는 Metasploit (RPC), Cobalt-Strike 등과 같이 API를 제공하는 모든 프레임워크/제품/툴킷)를 Visual Studio Code (또는 이에 상응하는 IDE)와 같은 IDE를 사용하여 스크립팅하기 쉽게 만드는 아이디어를 구상했습니다. 그래서 AutoTTP를 설계하기 시작했습니다. 이것은 아직 진행 중인 작업입니다. Empire 2.2로 테스트했습니다.


제 경우, 전술은 제 Attack Life Cycle 모델에 따라 구성됩니다. Lockheed Martin의 Kill-Chain(R), Mandiant Attack Life Cycle 및 Mitre의 ATT&CK와 같은 다른 모델도 있습니다. 어떤 모델이든, "전술"은 본질적으로 기법을 그룹화합니다, 예를 들어 코드 실행/페이로드 실행은 여러 방법으로 달성할 수 있습니다:

저는 관련 "전술"을 그룹화하기 위해 "Stage"를 사용합니다. 소스 트리를 살펴보면 폴더 구조가 매트릭스의 Tactics 열을 반영합니다. 매트릭스는 또한 각 공격 전술에 대한 각각의 제어 방안을 언급합니다. 이러한 단계는 어떻게 생겨났을까요?

빨간색 원 중앙의 벤 다이어그램은 Dartmouth College의 "Three Tenets for Secure Cyber-Physical System Design and Assessment"에서 가져온 것입니다. 이는 모든 성공적인 물리적/논리적 공격의 필요충분조건, 즉 요구 사항을 정의합니다. 저는 벤 다이어그램 주위에 빨간색 원(단계)을 추가하여 궁극적으로 정보 기밀성, 무결성, 시스템 가용성 또는 사이버-물리적 시스템(중요 정보 인프라를 생각해보세요)과 관련된 경우 안전에 영향을 미치는 일반적인 공격 흐름을 설명했습니다.
공격자는 Stage 1에서 시작하여 Stage 4로 바로 들어갈 수 있습니다. 예를 들어 공개적으로 노출된 관리 페이지의 기본 관리자 자격 증명을 사용하는 경우입니다. 선형적일 필요는 없습니다(1->2->3->4단계). 초기 침투 후, 첫 번째 시스템에서 권한을 상승시키기 전에 내부 정보 수집(reconn)을 먼저 수행한 다음 동일한 네트워크 내의 다른 대상 시스템에 원격 명령을 실행할 수 있습니다. 다음 피해자 시스템의 경우 Stage 2입니다. 성공적인 페이로드 전달 및 실행을 통해 공격자는 또 다른 시스템에 대한 명령 및 제어를 획득합니다.

왼쪽의 파일은 procedure 스크립트이고, 오른쪽은 technique 스크립트입니다. procedure 스크립팅에는 Empire 특정 세부 사항이 너무 많이 포함되어 있지 않으며, 대부분의 세부 사항은 technique 스크립트에 캡슐화되어 있습니다. Procedure 스크립팅은 자산 정보(예: 호스트명/IP, 페이로드를 보낼 이메일, 사용할 페이로드 기법 등)를 사용하여 기법의 순서에 초점을 맞춰야 합니다.
"is user admin?" 예제는 실제로 여러 단계로 구성되어 있습니다. 스크립트 주석에 설명된 대로 적어도 3가지 가능성이 있기 때문입니다. 물론 Empire, Metasploit 등에서 사용자 정의 "매크로"를 만들 수 있지만, 특정 프레임워크/제품 내에 긴밀하게 통합됩니다. 우리는 사용 가능한 도구를 활용하고 재사용 가능한 기법을 모듈로 구성하여 절차적 수준(즉, 자동화)에서 혼합 및 매칭할 수 있기를 원합니다.

저는 Empire의 잘 구조화된 모듈을 활용하여 자동 완성 Python 클래스를 만들었습니다. 전체 모듈 이름(예: powershell/situational_awareness....)을 입력하는 대신 IDE의 자동 완성 기능을 사용하면 됩니다.

각 모듈에는 (대부분의 프레임워크에서) 옵션이 있습니다. Empire의 경우 rest/headless 모드로 실행하면(이에 대해서는 나중에 다루겠습니다) 모듈 옵션을 볼 수 있는 콘솔이 없습니다. autocomplete-helper 클래스에서 각 모듈에는 options 하위 클래스가 있습니다. 필수 옵션은 위와 같이 접두사가 붙어 있으므로 모듈을 호출하기 전에 해당 옵션에 값을 먼저 채울 수 있습니다.

각 모듈에 대한 설명도 Python 클래스 문서의 일부로 포함되어 있으며, 클래스 위로 마우스를 가져가면 표시됩니다. Empire 2.1 기준으로 276개의 모듈이 있으므로 이 도우미 클래스를 만들려면 약간의 스크립팅이 필요합니다! 출처: https://gist.github.com/jymcheong/22c2eede978c8eb694945e3347c20c6b
Visual Studio Code(또는 이에 상응하는)와 같은 IDE를 사용하면 디버그 변수 감시, 스크립트 단계별 실행 또는 반환 값 구조를 파악한 후 디버깅/단계 실행 중 스크립트를 수정할 수도 있습니다. Empire에 대한 REST API 문서가 있지만 때로는 모듈을 실행하기 전까지 반환 값을 정확히 알 수 없습니다. 그 이유로 다음 주제로 이어집니다.
IDE에서 모든 것을 처리하고 싶지만 콘솔이 필요합니다. DeathStar의 저자는 Empire를 사용하여 도메인 관리자를 장악하는 스크립트를 개발하면서 이미 이를 알고 있었습니다. 저는 그의 아이디어를 차용했지만 그의 접근 방식이 리팩토링된 start restful api 함수에서 작동하지 않기 때문에 Empire 2.1에 맞게 스레딩 방식을 조정했습니다. 출처: https://gist.github.com/jymcheong/6a7668ecf73c29dd1d234d1c76ef438c
Empire 2.2에는 REST 모드 실행 중 명령 루프 핸들러가 있으므로 empire 스크립트를 해킹할 필요가 없습니다. 그러나 API를 사용하여 에이전트 결과를 가져오는 동안 에이전트와 상호 작용하지 마십시오.
EmpireAPIWrapper를 제공한 @radioboyQ, pymetasploit을 제공한 @allfro 및 @Mikaayenson, 그리고 @byt3bl33d3r에게 감사드립니다. MTFBWU.