ssh 명령어를 이용하여 외부 SSH 서버 접속 시 탐지합니다.
개요
| 중요도 | 상 |
|---|---|
| 유형 | 실시간 탐지 |
| 로그 스키마 | secuve-tos-trace |
| 메시지 | SSH 외부 연결: $host_ip ($hostname) ➜ $dst_host |
| 출력 필드 순서 | _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 기술 | T1048 Exfiltration Over Alternative Protocol |
| MITRE 전술 | TA0010 Exfiltration |
| 참조 객체 | 네트워크 대역 내부망 대역3 |
쿼리
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
대상 수집 모델
- Secuve TOS 명령줄 jdbc
위협 분석
- 공격자가 내부 시스템에서 외부 C2(Command & Control) 서버로 SSH 터널링을 통해 통신을 시도할 수 있습니다.
- SSH를 이용한 데이터 유출 시도일 수 있습니다.
- 내부 침투 후 외부 공격 인프라로의 리버스 쉘 연결 시도일 수 있습니다.
오탐 유형
- 업무상 정상적인 외부 서버 접속에서 탐지될 수 있습니다. 이 경우에는 예외 조건을 추가하여 오탐을 방지합니다.
- 예시: 개발팀의 외부 Git 서버 접속, 클라우드 인프라(AWS, GCP 등) 관리 작업
대응 방안
- 목적지 호스트(
dst_host) 및 사용자(dst_user)의 정당성을 확인합니다. - 목적지 IP/도메인의 평판 조회 및 악성 여부를 확인합니다.
- 해당 SSH 접속의 업무 연관성 및 승인 여부를 검토합니다.
- 비인가 외부 접속 확인 시 출발지 시스템을 격리하고 침해 지표(IoC)를 수집합니다.