경계 및 엔드포인트 로그를 통한 Akira 랜섬웨어 킬 체인 추적
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
이 기사는 Akira 랜섬웨어 작전에 연결된 최근 침해에 대해 설명합니다. 공격자는 비활성화된 로컬 SSL VPN 계정을 무차별 대입(brute-forcing)하여 초기 접근을 얻고, 이후 자격 증명 검색, Kerberoasting, RDP를 통한 횡적 이동을 진행했습니다. 암호화를 시작하기 전에 로그를 지우고 섀도 복사본을 제거했습니다. 주목할 만한 점은 전체 시퀀스를 방화벽 syslog 데이터와 Windows EVTX 로그를 통해 볼 수 있었으며, 엔드포인트 탐지 도구에 의존하지 않았습니다. 이 보고서는 주변 및 엔드포인트 텔레메트리를 결합하면 랜섬웨어 활동을 초기 단계에서 노출시킬 수 있음을 강조합니다.
조사
조사는 SSL VPN 방화벽 로그와 도메인 컨트롤러 및 구성원 서버에서 수집한 Windows 이벤트 로그 내보내기에 전적으로 의존했습니다. 이벤트 ID는 다음을 포함합니다 4624, 4688, 4769, 1102, 및 7036 이들이 초기 접근부터 최종 영향까지의 전체 킬 체인을 재구성하는 데 상관관계가 있었습니다. 관측된 기술에는 자격 증명 스터핑, 도메인 발견, Kerberoasting, RDP 인증, 로그 지우기, 섀도 복사본 삭제가 포함되었습니다. 침입 맵을 그리기 위해 메모리 이미지나 EDR 텔레메트리가 필요하지 않았습니다.
완화책
이 보고서는 원격 액세스 보안 강화, MFA 시행, 방화벽 접근 목록에서 비활성 계정 제거 및 인증 잠금 정책 강화를 권장합니다. 또한 모든 시스템에서 이벤트 ID와 함께 상세한 프로세스 감사 활성화, 보안 로그 보유 기간 증가, 주요 로그를 외부 저장소로 전달하는 것을 권장합니다. 탐지 콘텐츠는 RC4 기반 Kerberos 티켓, 4688 섀도 복사본 삭제 및 섀도 복사본 삭제 및 예상치 못한 PowerShell 명령을 포함해야 합니다 -EncodedCommand를 사용한 명령. 인프라 전반의 일관된 시간 동기화는 신뢰할 수 있는 상관 관계에 필수적입니다.
대응
식별된 지표가 나타나면 대응자는 즉시 손상된 VPN 계정을 격리하고 영향을 받은 시스템을 격리해야 합니다. 관련 방화벽 및 EVTX 로그를 보존하고 자격 증명을 재설정하며, 손상된 계정을 비활성화하고 가능한 경우 깨끗한 백업에서 섀도 복사본을 복원해야 합니다. 추가적인 지속성 또는 후속 활동을 식별하기 위한 전체 포렌식 검토를 진행하며, 랜섬웨어 대응 절차를 활성화합니다. 이해관계자에게 즉시 알리고, 필요 시에는 공개를 고려해야 합니다.
graph TB %% Class definitions classDef phase fill:#ffcc99 classDef tool fill:#c2f0c2 %% Node definitions phase_initial_access[“<b>단계</b> – 초기 접근<br/><b>기법</b> – T1133 외부 원격 서비스<br/><b>설명</b>: 침해된 로컬 계정을 이용한 SSL VPN 대상 크리덴셜 스터핑.”] class phase_initial_access phase tech_valid_accounts[“<b>기법</b> – T1078 유효한 계정<br/><b>설명</b>: 탈취된 자격 증명을 사용하여 VPN에 로그인.”] class tech_valid_accounts phase phase_discovery[“<b>단계</b> – 정찰<br/><b>기법</b> – T1482 도메인 신뢰 관계 탐색<br/><b>설명</b>: nltest를 사용하여 도메인 신뢰 관계 열거.”] class phase_discovery phase tech_account_discovery[“<b>기법</b> – T1087 계정 탐색<br/><b>설명</b>: net.exe 및 whoami를 사용하여 사용자 및 그룹 열거.”] class tech_account_discovery phase phase_credential_access[“<b>단계</b> – 자격 증명 접근<br/><b>기법</b> – T1558.003 Kerberoasting<br/><b>설명</b>: 서비스 계정 비밀번호 크래킹을 위해 RC4 서비스 티켓 요청.”] class phase_credential_access phase phase_lateral_movement[“<b>단계</b> – 측면 이동<br/><b>기법</b> – T1021.001 원격 서비스 RDP<br/><b>설명</b>: RDP를 이용해 서버 및 도메인 컨트롤러로 이동.”] class phase_lateral_movement phase phase_persistence[“<b>단계</b> – 지속성 및 권한 상승<br/><b>기법</b> – T1136 계정 생성<br/><b>설명</b>: 비기본 OU에 서비스 계정 생성 및 권한 그룹 추가.”] class phase_persistence phase phase_execution[“<b>단계</b> – 실행<br/><b>기법</b> – T1059.001 PowerShell<br/><b>설명</b>: -EncodedCommand를 사용한 PowerShell 실행.<br/><b>기법</b> – T1059.003 Windows 명령 셸<br/><b>설명</b>: cmd.exe를 통한 다양한 명령 실행.”] class phase_execution phase phase_defense_evasion[“<b>단계</b> – 방어 회피<br/><b>기법</b> – T1070.001 Windows 이벤트 로그 삭제<br/><b>설명</b>: Windows 로그 삭제.<br/><b>기법</b> – T1562 방어 체계 무력화<br/><b>설명</b>: sc.exe 또는 net stop을 이용한 보안 서비스 중지.”] class phase_defense_evasion phase phase_impact[“<b>단계</b> – 영향<br/><b>기법</b> – T1490 시스템 복구 방해<br/><b>설명</b>: vssadmin으로 섀도 복사본 삭제.<br/><b>기법</b> – T1565.001 저장 데이터 변조<br/><b>설명</b>: 디스크 파일 암호화.”] class phase_impact phase tool_ssl_vpn[“<b>도구</b> – SSL VPN 클라이언트”] class tool_ssl_vpn tool tool_nltest[“<b>도구</b> – nltest 유틸리티”] class tool_nltest tool tool_net[“<b>도구</b> – net.exe 유틸리티”] class tool_net tool tool_whoami[“<b>도구</b> – whoami 명령”] class tool_whoami tool tool_powershell[“<b>도구</b> – PowerShell”] class tool_powershell tool tool_cmd[“<b>도구</b> – cmd.exe”] class tool_cmd tool tool_sc[“<b>도구</b> – sc.exe 명령”] class tool_sc tool tool_vssadmin[“<b>도구</b> – vssadmin 유틸리티”] class tool_vssadmin tool %% Connections showing flow phase_initial_access –>|다음으로 이어짐| tech_valid_accounts tech_valid_accounts –>|다음으로 이어짐| phase_discovery phase_discovery –>|다음으로 이어짐| tech_account_discovery tech_account_discovery –>|다음으로 이어짐| phase_credential_access phase_credential_access –>|다음으로 이어짐| phase_lateral_movement phase_lateral_movement –>|다음으로 이어짐| phase_persistence phase_persistence –>|다음으로 이어짐| phase_execution phase_execution –>|다음으로 이어짐| phase_defense_evasion phase_defense_evasion –>|다음으로 이어짐| phase_impact %% Tool usage edges phase_initial_access –>|사용| tool_ssl_vpn phase_discovery –>|사용| tool_nltest phase_discovery –>|사용| tool_net phase_discovery –>|사용| tool_whoami phase_execution –>|사용| tool_powershell phase_execution –>|사용| tool_cmd phase_defense_evasion –>|사용| tool_sc phase_impact –>|사용| tool_vssadmin
공격 흐름
탐지
관리자 계정 또는 그룹 나열 가능성 (명령줄을 통해)
보기
계정 또는 그룹 나열 / 조작 가능성 (명령줄을 통해)
보기
의심스러운 도메인 신뢰 탐색 (명령줄을 통해)
보기
의심스러운 VSSADMIN 활동 (명령줄을 통해)
보기
RDP 기반 횡적 이동 및 도메인 수준 권한 상승 탐지 [Microsoft Windows 보안 이벤트 로그]
보기
SSLVPN 무차별 대입 및 자격 증명 스터핑 탐지 [방화벽]
보기
시뮬레이션 실행
전제 조건: 텔레메트리 및 기준 사전 비행 검사를 통과해야 합니다.
근거: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적의 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령어와 서술은 식별된 TTP를 반영해야 하며 탐지 논리에 의해 예상되는 정확한 텔레메트리를 생성하는 것을 목표로 합니다.
-
공격 서사 및 명령어:
- 정찰(T1087): 공격자는 손상된 내부 시스템에서 사용자 이름을 나열하고 자격 증명 스터핑 목록을 작성합니다 (예:
users.txt). - 무차별 대입 루프 (T1021.001 / T1078.001): 알려진 호스팅 제공업체에 속한 손상된 외부 IP 범위(예:
203.0.113.45)를 사용하여 공격자는 1시간 내에 빠른 일련의 SSLVPN 인증 시도가 실패하게 됩니다 (≥ 50회). 각 시도는 목록에서 다른 암호를 사용하여 단일 피해자 계정을 대상으로 합니다. - 성공적인 자격 증명 스터핑: 목록을 모두 소진한 후, 올바른 비밀번호를 찾아 동일한 IP에서 성공적으로 로그인하여 “successful_auth” 절을 충족시킵니다.
- 회피 (선택적 – T1070.001): 공격자는 성공적으로 로그인한 후 추적을 숨기기 위해 VPN 장치에서 보안 로그를 지웁니다(이 규칙에서 다루지 않음).
- 정찰(T1087): 공격자는 손상된 내부 시스템에서 사용자 이름을 나열하고 자격 증명 스터핑 목록을 작성합니다 (예:
-
회귀 테스트 스크립트: Bash 스크립트를 사용하는
curl(Linux 공격자 박스에서 작동). 실제 환경에 맞게 변수를 조정하십시오.#!/usr/bin/env bash # ------------------------------------------------------------------ # SSLVPN 무차별 대입 및 자격 증명 스터핑 시뮬레이션하여 시그마 규칙을 트리거합니다. # ------------------------------------------------------------------ VPN_ENDPOINT="https://vpn.example.com/remote/auth" USERNAME="victim_user" PASSWORD_LIST="passwords.txt" # 한 줄당 하나의 비밀번호 SOURCE_IP="203.0.113.45" # VPN에 라우팅 가능해야 함 # 단일 로그인 시도를 수행하는 함수 tempt_login() { local pwd="$1" # --silent로 혼잡을 피하고, --write-out으로 HTTP 코드 캡처 curl --silent --output /dev/null --write-out "%{http_code}" --user "$USERNAME:$pwd" "$VPN_ENDPOINT" } # 1. 55번의 로그인 시도 실패 생성 (속도 ~ 1/sec) echo "실패한 시도를 시작합니다..." count=0 while IFS= read -r pwd && [ $count -lt 55 ]; do http_code=$(tempt_login "$pwd") echo "Attempt $((count+1)): HTTP $http_code (expected 401)" ((count++)) sleep 1 # 1시간 이내 창 유지 done < "$PASSWORD_LIST" # 2. 올바른 비밀번호로 성공적인 로그인 수행 (파일의 마지막 줄로 가정) echo "성공적인 로그인 수행..." correct_pwd=$(tail -n1 "$PASSWORD_LIST") http_code=$(tempt_login "$correct_pwd") echo "Successful attempt: HTTP $http_code (expected 200)" echo "시뮬레이션 완료." -
정리 명령어: 임시 파일을 제거하고 방화벽 속도 제한을 재설정합니다(변경된 경우).
#!/usr/bin/env bash # SSLVPN 무차별 대입 시뮬레이션 후 정리 # 임시 비밀번호 목록이 즉석에서 생성된 경우 삭제 if [ -f passwords.txt ]; then shred -u passwords.txt echo "Deleted passwords.txt" fi # 테스트를 위한 임시 iptables 규칙이 사용된 경우 선택적으로 재설정 sudo iptables -D INPUT -s 203.0.113.45 -j DROP 2>/dev/null || true echo "정리가 끝났습니다."