
기존 프로세스에 .NET 어셈블리 주입
이 도구는 Cobalt Strike의 전통적인 fork and run 실행 방식에 대한 대안입니다. 로더는 현재 Beacon을 포함한 모든 프로세스에 주입될 수 있습니다. 오래 실행되는 어셈블리는 계속 실행되며, execute-assembly의 동작과 유사하게 출력을 Beacon으로 다시 보냅니다.
inject-assembly는 두 가지 구성 요소로 이루어져 있습니다:
BOF initializer: 인수와 함께 원격 프로세스에 어셈블리 로더를 주입하는 소형 프로그램입니다. 주입을 위해 BeaconInjectProcess를 사용하므로, 이 동작은 Malleable C2 프로필이나 프로세스 주입 BOF(버전 4.5부터)로 사용자 정의할 수 있습니다.
PIC assembly loader: 프로젝트의 핵심입니다. 이 로더는 .NET 런타임을 초기화하고, 제공된 어셈블리를 로드하며, 어셈블리를 실행합니다. 로더는 대상 프로세스에 새 AppDomain을 생성하여 실행이 완료되면 로드된 어셈블리를 완전히 언로드할 수 있습니다.
원격 프로세스와 Beacon 간의 통신은 명명된 파이프(named pipe)를 통해 이루어집니다. Aggressor 스크립트는 파이프 이름을 생성한 후 BOF initializer에 전달합니다.
다운로드한 후 inject-assembly.cna Aggressor 스크립트를 Cobalt Strike에 로드합니다. 그런 다음 다음 명령을 사용하여 어셈블리를 실행할 수 있습니다:
inject-assembly pid assembly [args...]
PID로 0을 지정하면 현재 Beacon 프로세스에서 실행됩니다.
FindObjects-BOF와 같은 다른 도구를 사용하여 이미 .NET 런타임을 로드한 프로세스를 찾는 것이 좋지만, inject-assembly가 작동하는 데 필수 요구 사항은 아닙니다.
jobkill을 사용하여 명명된 파이프를 계속 연결 해제할 수 있습니다.이 프로젝트는 다음 프로젝트가 없었다면 불가능했을 것입니다:
기타 기능과 영감은 다음 자료에서 얻었습니다: