생각들
- 취약한 인증 공격이라는게 뭔지?
- 인증이 어떻게 하면 취약해지는지?
- 세션 ID가 알려지면 안되나??
-> ㅇㅇ 인증 우회 가능함. 나도 테스트할 때 경험해 봄
- 세션 ID를 쿠키나 html폼의 히든 필드에 담으면 공격자가 절대 못 보나??
이렇게만 하면 100% 안전한건가? -> ㄴㄴㄴ https까지 설정해야 함
- 웹 브라우저 종료하면 자동으로 로그아웃되게 어떻게 구현함?
- 쿠키의 secure 옵션은 처음 보는데 뭔지?
취약한 인증 케이스들
- 계정 ID/PW가 쉽게 추측 가능한 경우
- 비밀번호 많이 틀려도 재시도에 제약이 없는 경우
- 세션 ID 노출? 되어 세션 하이재킹? 공격이 가능한 경우
- 세션 타임아웃이 없는 경우
brute force attack
- 가능한 경우를 모두 시도하는 방법
- 패스워드의 길이가 길어질수록 무용해지는 공격 방법
- 딕셔너리 공격
- 버프 수트의 intruder 이용하여 자동화 공격 가능
- proxy/http history로 로그인 요청 url 확인
- position, payload 설정하여 자동화 공격
- 대응 방법
- locking
패스워드 여러 번 틀리게 입력하면 로그인 시도를 제한하기 (locking)
locking도 악용 가능
- 캡차
자동화된 프로그램을 무용하게 만들 수 있어서 유용함
세션 ID 노출
- 세션 id가 노출되면 공격자가 그 세션 id를 이용하여 인증 과정 우회 가능
- 세션 id는 쿠키에 담아서 전달하지만, URL로 전달되는 경우도 있음. 이 과정에서 세션 ID 노출될 수 있음
-> 세션 ID는 쿠키나 form의 히든 필드를 통해 전달되는 것이 좋다고 함
- 대응 방안
- 세션 ID가 URI에 노출되지 않도록 하기
- HTTPS 암호화 통로를 통해 전달되도록 하기
- 쿠키로 전달할 때는 secure?, httpOnly 속성 추가하기
- 유효시간 설정하고, 시간 지나면 무조건 파기
- 웹 브라우저 종료하면 자동으로 로그아웃 되도록 하기
- 세션 ID는 랜덤으로 생성되고 추측할 수 없어야 함