•
개요
브루트포스 공격은 비밀번호나 암호를 알아내기 위해 가능한 모든 조합을 무작위로 시도하는 공격 방식입니다. 공격자는 사전에 준비된 단어나 숫자 리스트(사전 공격)를 사용하거나, 자동화된 도구를 통해 무작위로 비밀번호를 시도하여 인증을 우회하려고 합니다. 이 공격은 시간이 오래 걸리지만, 충분한 시간과 자원이 있다면 성공할 가능성이 있습니다.
•
공격 탐지 규칙 확인 및 설정 (Suricata & Zeek)
◦
Suricata
1.
Detection - “+”
Detection 메뉴 이동 및 “+”버튼 클릭, 룰 추가 메뉴 진입
2.
룰 작성
▪
Language : Suricata
▪
License : GPL-2.0-only
▪
Signature
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 22 (msg:"SSH Brute Force Attempt Detected"; flow:to_server,established; detection_filter:track by_src, count 10, seconds 1; sid:1000095; rev:1;)
Plain Text
복사
•
룰 내용 (Signature):
◦
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 22:
▪
alert: 이 룰은 탐지 시 경고(alert)를 발생시킵니다.
▪
tcp: 이 룰은 TCP 프로토콜을 사용하는 트래픽에 적용됩니다.
▪
$EXTERNAL_NET any: 외부 네트워크에서 오는 트래픽을 감시합니다. $EXTERNAL_NET은 일반적으로 외부에서 들어오는 트래픽을 의미하며, any는 모든 포트를 나타냅니다.
▪
$HTTP_SERVERS 22: $HTTP_SERVERS 변수에 정의된 서버들에 대한 트래픽을 대상으로 합니다. 22는 SSH 포트를 나타내며, SSH 브루트포스 공격이 주로 포트 22를 대상으로 하기 때문에 해당 포트를 명시하고 있습니다.
◦
msg:"SSH Brute Force Attempt Detected":
▪
탐지된 경우 출력할 경고 메시지로 **"SSH Brute Force Attempt Detected"**라는 텍스트가 표시됩니다. 이는 SSH 브루트포스 공격을 감지했다는 경고를 의미합니다.
◦
flow,established:
▪
to_server: 트래픽이 서버로 향하고 있음을 의미합니다. 이 룰은 클라이언트에서 서버로 들어오는 SSH 트래픽을 대상으로 합니다.
▪
established: 이미 연결이 성립된 상태에서 발생하는 트래픽을 대상으로 합니다. 즉, SSH 연결이 성립된 이후에 다수의 인증 시도가 이루어지는 경우를 감지합니다.
◦
detection_filterby_src, count 10, seconds 1:
▪
track by_src: 동일한 소스 IP 주소에서 발생하는 트래픽을 추적합니다.
▪
count 10: 1초 동안 동일한 소스 IP로부터 10번 이상의 SSH 시도가 있을 경우 탐지합니다. 1초 안에 10번의 인증 시도는 정상적인 사용이 아니라 브루트포스 공격일 가능성이 큽니다.
▪
seconds 1: 탐지 시간 창을 1초로 설정합니다. 즉, 1초 안에 10번 이상의 SSH 시도가 있을 때 이를 브루트포스 공격으로 간주합니다.
◦
sid:1000095:
▪
이 룰의 고유 식별자(SID)로, 1000095는 이 룰에 할당된 고유 번호입니다. 이를 통해 탐지된 이벤트를 다른 룰과 구분할 수 있습니다.
◦
rev:1:
▪
룰의 버전 정보를 나타내며, 이 경우 1은 해당 룰의 첫 번째 버전임을 의미합니다. 룰이 수정될 경우 rev 번호가 증가합니다.
•
공격 지표 확인 및 경고 필터링 (Kibana&zeek)
◦
suricata
▪
알람 발생 확인
◦
kibana & zeek
▪
Alert 로그 발생 확인
▪
Document
▪
PCAP 기능 활용
비정상적으로 빠르게 ssh 연결 요청이 오고 있음을 확인
•
대응 방안
◦
강력한 비밀번호 정책 적용
◦
이중 인증(2FA) 활성화
◦
SSH 키 기반 인증 사용
◦
Fail2Ban 설치 및 설정
◦
SSH 접근 제한(IP 화이트리스트)