| 취약한 인증 공격
- 인증 과정이 제대로 보호되지 않아서 인증과정 우회가 가능한 경우 발생
- 브루트 포스 공격이 시도될 수 있음(다량의 패스워드 목록 파일을 이용해 자동화함)
브루트 포스 공격 개요
- 특정 정보(주로 패스워드)를 알아내기 위한 공격
- 로그인에 여러 번 실패해도 제한이 없는 경우 공격이 가능해짐
ㄴ 1. 일련 문자들 하나씩 입력하는 방법(예. 0000~9999 등)
ㄴ 2. 자주 쓰이는 패스워드 이용하여 시도(예. password, iloveyou 등) [딕셔너리 공격]
- 성능을 높이기 위해 그래픽카드 GPU를 활용하는 크래킹 프로그램 등 활용하기도 함
브루트 포스 공격 실습
- 버프 스위트의 인트루더 기능을 이용해 딕셔너리 공격 수행
- 페이로드 타입이 브루트 포스인 경우는 문자를 선택해 공격 가능
ㄴ 1. 버프 스위트를 통해 요청 메시지가 전달되도록 프록시 인터셉트 기능을 끈다.
ㄴ 2. admin과 아무 내용의 패스워드 입력 후 로그인 시도를 한다.
ㄴ 3. 버프 스위트 프록시 -> 히스토리(HTTP History) 탭에서 방금 시도의 요청을 찾는다.
ㄴ 4. 해당 요청을 우클릭 해 인트루더로 보낸다.
ㄴ 5. 페이로드가 입력될 영역(쿠키나 파라미터 등 변수값)이 자동으로 표시되어 있는데 패스워드 파라미터의 값만 변경하게 하기 위해 Clear버튼을 눌러 선택된 내용을 모두 지우고 password 파라미터 값만 마우스로 선택해 Add를 누른다.
ㄴ 6. 페이로드 탭으로 이동하여 Load 버튼을 이용해 목록 파일을 추가한다.
칼리의 /usr/share/john/password.lst 경로의 기본 파일을 추가해본다.
ㄴ 7. #!comment로 시작하는 문자열은 주석이므로 Remove를 이용해 지우고 우측 상단의 Start attack을 눌러 공격한다.
ㄴ 8. 아래 사진의 password는 응답 길이는 5394로 다른 요청들의 응답 길이인 5335와 다르다. 패스워드가 틀린 다른 요청들은 로그인 실패가 응답되고 올바른 경우 다른 페이지가 응답될 것 이기 때문이다.
브루트 포스 공격 대응
- 짧은 시간 내에 일정 횟수 이상 로그인 시도에 실패 시, 정해진 시간 동안 로그인하지 못하게 함
- 캡차(CAPTCHA) 사용
세션 ID 노출 사례 및 보호 대책
- 요청 URI의 쿼리 스트링 부분에 PHPSESSID가 노출되는 경우가 있음(세션 하이재킹(가로채기)이 가능해짐)
- 그러므로 세션ID는 쿠키나 폼의 히든필드를 통해 전달
- 혹은 HTTPS 암호화 채널을 통해 전달
- 세션ID를 쿠키로 전달할 경우 Secure, HttpOnly와 같은 쿠키 속성 추가
- 로그아웃된 세션ID는 즉시 파기