본문 바로가기

Study records/Web hacking

취약한 인증 공격

브루트 포스 공격

브루트 포스(brute force) 공격은 특정 정보(주로 사용자의 패스워드)를 알아내기 위한 공격이다. 패스워드 크래킹을 위해 사용하기도 하며,  웹 애플리케이션을 대상으로는 로그인에 필요한 사용자 패스워드를 알아내고자 할 때 사용할 수 있다. 웹 애플리케이션 중에는 사용자가 로그인을 여러 번 실패하더라도 다음 로그인 시도에 아무런 제한을 하지 않는 경우가 있다. 이 경우 로그인을 무한히 계속해서 시도할 수 있기 때문에, 공격자는 특정 사용자의 패스워드를 알아내기 위해 무작위의 값을 계속 입력하며 로그인을 시도함으로써 비록 시간이 걸린다고 할지라도 그 사용자의 패스워드를 결국 알아낼 수 있다. 

브루트 포스 로그인 실패 화면

 

 

페이로드 탭 화면

 

 

 칼리 리눅스의 /usr/share/john/password.lst 경로에는 1990년대 중반에 많이 사용된 패스워드와 2006년부터 2010년까지 웹사이트에서 많이 쓰인 패스워드로 구성되어 있는 파일이 있다. 이 파일에는 총 3546개의 패스워드가 등록되어 있다.

칼리 리눅스에 내장된 password.lst 패스워드 목록 파일

 

심플 리스트 목록에 패스워드 파일의 내용을 로드
주석 부분을 삭제하고 난 다음의 심플 리스트

 

 

실행 결과를 보면 응답 길이(Length)가 다른 요청 하나가 사용자의 패스워드임을 추측할 수 있다.

인트루더 실행 결과

 

 

브루트 포스 공격 대응

 짧은 시간 내에 일정 횟수 이상 로그인 시도에 실패하면 정해진 시간 동안 로그인하지 못하게 하는 방법으로 대응할 수 있다. 일정 시간 동안 로그인 시도를 제한하는 방법을 락킹(locking)이라 하고, 스마트폰 잠금 화면에서 이러한 방법을 사용한다. 다른 대응 방법으로는 캡차(CAPTCHA)를 이용하여 흘려쓴 글자나 그림 문자를 로그인 시도 시 입력하도록 하는 방법이다. 

 

 

세션 ID 노출 사례 및 보호 대책

 세션 ID가 노출되면 공격자는 그 세션 ID를 이용하여 인증 과정을 우회하여 다른 사용자가 로그인한 것처럼 웹사이트에 접속할 수 있다. 세션 ID는 일반적으로 쿠키를 통해 전달되지만 간혹 설정 오류나 구현상의 이유 등으로 URL을 통해 전달되는 경우가 있다. 그런데 URL로 세션 ID가 전달되면 이 과정에서 세션 ID가 노출될 수 있는 위험이 있다.

웹 서버의 접근 로그에 요청 URI가 기록되어 세션 ID가 노출된다

 

PHPSESSID가 URL에 노출되고 있다

 

 세션 ID를 보호하기 위해서는 세션 ID가 URI를 통해 노출되지 않아야 한다. 그리고 HTTPS 암호화 채널을 통해 전달되어야 하고, 웹 브라우저를 종료하면 자동으로 로그아웃되도록하는 등이 있다.

'Study records > Web hacking' 카테고리의 다른 글

[Beebox] HTML 인젝션  (0) 2024.06.20
크로스 사이트 스크립팅 공격  (1) 2024.05.25
커맨드 인젝션 공격  (0) 2024.05.25
SQL 인젝션 공격  (1) 2024.05.24
정보 수집과 대응 방법  (0) 2024.05.23