Search

브루트 포스

개요
브루트포스 공격은 비밀번호나 암호를 알아내기 위해 가능한 모든 조합을 무작위로 시도하는 공격 방식입니다. 공격자는 사전에 준비된 단어나 숫자 리스트(사전 공격)를 사용하거나, 자동화된 도구를 통해 무작위로 비밀번호를 시도하여 인증을 우회하려고 합니다. 이 공격은 시간이 오래 걸리지만, 충분한 시간과 자원이 있다면 성공할 가능성이 있습니다.
공격 탐지 규칙 확인 및 설정 (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 화이트리스트)