> 22.12 페이팔 크리덴셜 스터핑 사고 이후 국내 한국장학재단, 워크넷 등에서 관련 사고가 발생
- 이미 다른 곳에서 탈취한 크리덴셜를 이용해 여러 웹 사이트나 앱에 접근을 시도(Stuffing, 대입)하여 개인정보나 자료를 탈취
> 크리덴셜이란 사용자가 본인을 증명하는 수단으로, 대부분의 사용자들이 여러 사이트에 같은 크리덴셜(패스워드)을 사용하고 있기 때문에 발생
> 가능한 모든 계정정보를 대입하는Brute-Force 공격과 차이를 보임
2. 실습
2.1 DVWA Brute-Force: Level Low
- user/user 계정으로 로그인을 시도한 결과 "Username and/or password incorrect" 에러가 출력되며 로그인 실패
- 로그인 방식은 GET 메소드를 사용하며, 사용자로부터 username과 password 변수를 입력받음
- THC Hydra를 이용하여 공격을 자동화하여 실습을 진행
THC Hydra - "The Hacker's Choice"(THC)라는 단체에서 개발하여 배포하는 명령행 기반의 모의침투(pentest) 도구 - SSH, TELENT, HTTP, HTTPS, FTP, LDAP, SMB, SNMP, POP3 등 다수의 통신규약에 대해 사전기반 비밀번호 공격도구 - 웹취약점분석에서는 관리자나 사용자 계정을 취약하게 관리하는 지의 여부를 점검할 수 있음
- 먼저 DVWA IP는 192.168.56.109이며, 로그인은 GET 방식으로 이루어짐
hydra 192.168.56.109 http-form-get
- 로그인 페이지는 /vulnerabilities/brute/, 사용자가 입력한 정보는 username=admin&password=user&Login=Login로 전달
- 로그인 실패 시 Username and/or password incorrect. 문자열이 출력
- Impossible 레벨의 PHP 소스코드를 확인해보면 3회이상 계정 오입력 시 15분동안 계정을 잠금 처리
- 공격자는 15분동안 대기해야 하므로 반복적 대입 공격이 거의 불가능함
- 하지만, 정상적인 사용자 또한 15분을 대기하여야 하므로 적절한 시간 설정이 필요
// Default values
$total_failed_login = 3;
$lockout_time = 15;
$account_locked = false;
[생략]
if( ( $data->rowCount() == 1 ) && ( $row[ 'failed_login' ] >= $total_failed_login ) ) {
// User locked out. Note, using this method would allow for user enumeration!
//echo "<pre><br />This account has been locked due to too many incorrect logins.</pre>";
// Calculate when the user would be allowed to login again
$last_login = $row[ 'last_login' ];
$last_login = strtotime( $last_login );
$timeout = strtotime( "{$last_login} +{$lockout_time} minutes" );
$timenow = strtotime( "now" );
// Check to see if enough time has passed, if it hasn't locked the account
if( $timenow > $timeout )
$account_locked = true;
}