이 문서에 포함된 어떠한 내용도 불법적이거나 비윤리적인 목적으로 보안 도구나 방법론을 사용하도록 가르치거나 장려하지 않습니다. 항상 책임감 있는 태도로 행동하세요. 여기에 설명된 도구나 기법을 사용하기 전에 개인 테스트 환경 또는 허가를 받았는지 확인하세요. |
Brute Force 공격은 시도와 오류(trial-and-error) 방식을 사용해 시스템의 암호나 인증 정보를 알아내려는 공격 유형으로, 공격자는 가능한 모든 조합을 체계적으로 시도하여 올바른 정보를 찾으려고 한다. 이 방법은 단순하고 효과적일 수 있지만, 일반적으로 시간과 자원이 많이 소모된다. 따라서 약한 비밀번호나 제한 없는 인증 시도가 Brute Force 공격의 주요 표적이 된다.
종류 | 설명 | 예시 |
단순 Brute Force 공격 |
모든 가능한 비밀번호 조합을 하나씩 대입하여 시도 | 비밀번호가 숫자로만 구성된 경우 0000, 0001, ..., 9999를 차례로 시도 |
사전 공격 (Dictionary Attack) |
사전에 있는 단어 리스트(일반적으로 사용되는 비밀번호 리스트)를 기반으로 암호를 추측 | password, 123456, qwerty 같은 흔한 비밀번호를 시도 |
하이브리드 Brute Force 공격 |
사전 공격과 단순 Brute Force 공격을 결합 사전에 있는 단어에 숫자나 특수 문자를 추가하여 조합을 만듬 |
password1, qwerty!, admin123 |
역방향 Brute Force 공격 |
흔히 사용되는 암호(예: 123456)를 미리 정하고, 이를 다양한 사용자 계정에 시도 | 대규모 데이터베이스 누출로 얻은 사용자 계정 정보를 활용하기도 함 |
자격 증명 대입 (Credential Stuffing) |
유출된 사용자 이름과 비밀번호 조합을 다른 시스템에 재사용하여 인증을 시도 | 공격자가 유출된 이메일-비밀번호 조합을 이용해 은행 계정에 로그인 시도 |
약한 비밀번호 사용
비밀번호 복잡성 정책 부재
로그인 시도 제한 미흡
2단계 인증 미적용
캡차 미적용
강력한 비밀번호 정책 적용
로그인 시도 제한
캡차 적용
2단계 인증(2FA) 도입
암호화 및 해싱 강화
사용자 알림 시스템
IP 차단 및 블랙리스트 관리
로그 분석 및 모니터링
Brute Force 공격은 비밀번호 인증 시스템의 가장 기본적인 취약점을 공략하는 공격 방식이다. 이를 방지하기 위해 강력한 비밀번호 정책, 2단계 인증, 로그인 시도 제한, 캡차 적용 등 다층적인 보안 조치를 적용해야 한다. 정기적인 로그 모니터링과 취약점 점검으로 공격 시도를 사전에 탐지하고 차단하는 것도 중요하다.
소스코드를 살펴보면 아래와 같다.
$user = $_GET[ 'username' ];
$pass = $_GET[ 'password' ];
$pass = md5( $pass );
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
if( $result && mysqli_num_rows( $result ) == 1 ) {
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
}
else {
echo "<pre><br />Username and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
처음 보이는 화면은 로그인 페이지로, Low Level은 개발자가 Brute Force 공격에 대한 보호 조치를 완전히 누락하여 누구나 원하는 횟수만큼 아무 제약 없이 모든 사용자에게 로그인을 시도할 수 있도록 하였다.
테스트 목적으로 Uername과 Password에 test라고 입력 후 Login 버튼을 클릭해서 서버로 전송되는 패킷의 내용을 Burp Suite로 Request를 Intercept 하여 확인해 보면 GET으로 username Parameter와 password Parameter에 앞서 로그인 페이지에서 입력한 test가 들어가는 것을 확인할 수 있다.
Intercept 한 내용을 확인하였다면 Brute Force 공격을 위해 마우스 오른쪽 클릭 > Send to Intruder를 클릭하여, Intercept 한 Request의 내용을 Intruder로 보낸다.
Intruder의 Positions탭에서 공격 유형은 정의된 각 위치마다 다른 Payload Set를 반복하는 Cluster bomb을 선택하고, Payload가 삽입될 위치인 username Parameter와 password Parameter 선택 후 Add$를 이용하여 Payload 삽입 위치를 설정한다.
다음으로 Payload Set를 설정하기 위해 Payload탭을 클릭한다. Payload Set 1번에서는 username Parameter에 삽입될 Payload 정보를 입력하며, Payload Set 2번은 password Parameter에 삽입될 Payload 정보를 입력한다.
설정된 Payload Set에 따라 Request 횟수가 늘어나며, Start attack를 클릭하면, Brute Force 공격이 진행된다.
공격 실행 결과 Length로 정렬하면, Length 길이가 다른 Request보다 긴 결과들이 Brute Force 공격으로 확인된 UserName과 Password가 된다.
DVWA : Brute Force - High level (0) | 2024.12.29 |
---|---|
DVWA : Brute Force - Medium level (0) | 2024.12.28 |
DVWA (Damn Vulnerable Web Application) 초기 세팅 하기 (1) | 2024.12.28 |
DVWA (Damn Vulnerable Web Application) 수동 설치 (0) | 2024.12.28 |
도커(Docker)를 이용하여 DVWA (Damn Vulnerable Web Application)설치 (1) | 2024.12.27 |