
로컬 관리자 권한 없이 원격 머신에서 서비스 설치 여부(블라인드) 및/또는 실행 여부(명명된 파이프 노출 시)를 탐지합니다.
로컬 관리자 권한을 사용하지 않고 원격 머신에서 서비스가 설치되어 있는지(맹목적으로) 및/또는 실행 중인지(명명된 파이프를 노출하는 경우) 탐지합니다.
자세히 설명하면, 이 스크립트를 실행하면 대상 SMB 서비스(445/tcp)에 원격으로 연결하여 다음 작업을 수행합니다:
[MS-LSAT] RPC 호출 LsarLookupNames()을 통해 지정된 서비스가 설치되어 있는지 확인합니다. 권한 있는 계정을 사용할 필요는 없지만 "맹목적" 쿼리만 가능합니다(서비스 목록을 나열할 수 없고 특정 서비스의 상태만 물어볼 수 있습니다).
대상에 지정된 명명된 파이프가 존재하는지 확인합니다. 서비스(프로세스)는 해당 서비스에 특화된 명명된 파이프를 노출할 수 있으며, 이는 권한이 없는 사용자도 볼 수 있습니다. 따라서 서비스에 특화된 특정 명명된 파이프를 확인하면 특정 서비스가 실행 중인지 여부를 추론할 수 있습니다.
이것은 Impacket을 사용하는 독립 실행형 Python 스크립트이며, 별도로 설치할 필요가 없습니다. 최신 공식 Impacket(0.10.0 및 0.9.24)과 Python(3.9 및 3.10)을 사용하여 최신 Kali 및 Arch Linux에서 테스트했습니다.
확인할 서비스, 서비스 이름, 서비스에 특화된 명명된 파이프는 conf 폴더의 JSON 구성 파일(또는 더 편하다면 CSV 파일, 나중에 깨달았습니다 :), 그래서 맞춤형 csv2json 변환기도 제공됩니다)로 지정됩니다. 형식을 이해하려면 포함된 예제를 참조하세요.
포함된 구성 파일:
더 많은 서비스/명명된 파이프로 사용 사례를 확장할 수 있습니다. EDR 구성은 상당히 불완전하므로 자유롭게 추가하세요.
이 스크립트는 JSON 구성 형식을 사용하지만, 나중에 CSV로 작성하는 것이 훨씬 편하다는 것을 깨달아 CSV를 JSON으로 변환하는 csv2json.py 스크립트를 포함했습니다.
단일 대상을 상대로 AV/EDR 서비스(또는 다른 것)를 열거하는 것은 간단합니다:
./serviceDetector.py -conf conf/edr.json evil.corp/johndoe:[email protected]
Kerberos 인증도 지원됩니다(KRB5CCNAME 환경 변수가 ccache 파일을 가리키는 경우):
./serviceDetector.py -conf conf/edr.json -k -no-pass server.ecorp.local
여러 대상을 효과적으로 스캔하려면 GNU parallel이 매우 유용합니다:
cat targets.txt | parallel -j 50 ./serviceDetector.py evil.corp/johndoe:Passw0rd1@{}
여러 대상을 스캔하기 전에 계정 잠금을 방지하기 위해 하나의 대상으로 먼저 테스트하세요(예: 잘못 입력된 비밀번호의 경우).
작전 보안 참고: 여러 대상에 대한 동시 대량 로그인은 SOC 경보를 트리거할 수 있습니다.
여기서 사용된 두 가지 기술은 새로운 것이 아닙니다.
[MS-LSAT] RPC 호출 LsarLookupNames()는 훌륭한 PingCastle 도구의 Antivirusscanner 모듈에서 Vincent Le Toux (@mysmartlogon)에 의해 이전에 사용되었습니다.
실행 중인 서비스 탐지를 위한 명명된 파이프 아이디어는 Lee Christensen (@tifkin_)이 WebClient 서비스 탐지에 사용했던 이 트윗에서 영감을 받았습니다. AV/EDR 탐지를 위한 이 기술은 NSA의 NamedPipeTouch 도구(The Shadow Brokers 그룹에 의해 유출됨)에서도 사용되었습니다.