ssh 명령어를 이용하여 외부 SSH 서버 접속 시 탐지합니다.
Overview
| Priority | High |
|---|---|
| Type | Stream |
| Log schema | secuve-tos-trace |
| Message | SSH 외부 연결: $host_ip ($hostname) ➜ $dst_host |
| Output field order | _log_time, client_ip, host_ip, hostname, src_user, src_ip, src_host, src_path, dst_user, dst_ip, dst_host, dst_path, log_type, cmd_line, cmd_line_raw, working_dir |
| MITRE Techniques | T1048 Exfiltration Over Alternative Protocol |
| MITRE tactics | TA0010 Exfiltration |
| Referenced objects | Network range 내부망 대역3 |
Query
1| search contains(cmd_line, "ssh")
2| search match(lower(cmd_line), "\\bssh\\s")
3| eval src_ip = host_ip, src_host = hostname
4| rex field=cmd_line "ssh\s+(?<dst_user>\w+)@(?<dst_host>[a-zA-Z0-9\.\-]+)"
5| eval dst_ip = ip(dst_host)
6| search isnull(src_host) or matchnet("bb994ca4-1471-4b91-89f2-99a61bd529b5", src_ip) or ( isnull(src_ip) and match(src_host, "^[a-zA-Z0-9\\-]+$|^[a-zA-Z0-9\\-\\.]+\\.local"))
7| search not(isnull(dst_host) or matchnet("bb994ca4-1471-4b91-89f2-99a61bd529b5", dst_ip) or ( isnull(dst_ip) and match(dst_host, "^[a-zA-Z0-9\\-]+$|^[a-zA-Z0-9\\-\\.]+\\.local")))
내부에서 외부로의 SSH 접속 시도를 탐지합니다. 정규표현식으로 목적지 사용자(dst_user)와 호스트(dst_host)를 추출하고, matchnet을 이용하여 출발지는 내부, 목적지는 외부인 아웃바운드 SSH 접속만 필터링합니다.
참조 객체
- 내부망 대역:
bb994ca4-1471-4b91-89f2-99a61bd529b5
Target logger models
- Secuve TOS 명령줄 jdbc
Threat analysis
- 공격자가 내부 시스템에서 외부 C2(Command & Control) 서버로 SSH 터널링을 통해 통신을 시도할 수 있습니다.
- SSH를 이용한 데이터 유출 시도일 수 있습니다.
- 내부 침투 후 외부 공격 인프라로의 리버스 쉘 연결 시도일 수 있습니다.
False positives
- 업무상 정상적인 외부 서버 접속에서 탐지될 수 있습니다. 이 경우에는 예외 조건을 추가하여 오탐을 방지합니다.
- 예시: 개발팀의 외부 Git 서버 접속, 클라우드 인프라(AWS, GCP 등) 관리 작업
Response actions
- 목적지 호스트(
dst_host) 및 사용자(dst_user)의 정당성을 확인합니다. - 목적지 IP/도메인의 평판 조회 및 악성 여부를 확인합니다.
- 해당 SSH 접속의 업무 연관성 및 승인 여부를 검토합니다.
- 비인가 외부 접속 확인 시 출발지 시스템을 격리하고 침해 지표(IoC)를 수집합니다.