웹 해킹/portswigger

버프스위트를 이용한 웹 해킹, 인증 취약점: 자체 인증 메커니즘에 대한 공격 방지 1/8~4/8

코드라니(CODERANY) 2026. 8. 2. 15:40
Preventing attacks on your own authentication mechanisms
인증 취약점에 대한 공격 방지 

우리는 어떻게 인증을 구현하는지에 따라 웹사이트에서 취약할 수 있는지 몇 가지 예시를 보았습니다.
그런 공격들을 줄이기 위해서 당신의 웹사이트에서 당신이 항상 따라야하는 몇 가지 원칙이 있습니다.
Take care with user credentials
사용자의 자격을 증명하는 수단(비밀번호, 생체인증 등)을 주의해서 다루세요

아무리 강력한 인증 체계를 가지고 있더라도, 공격자가 사용할 수 있는 로그인 계정 정보를 자신도 모르게 노출한다면 무용지물이 되고 맙니다.
암호화 되지 않은 네트워크를 통해서는 어떤 로그인 정보도 절대 전송해서는 안된다는 점은 두말할 나위가 없습니다.
로그인 요청에 HTTPS를 적용했더라도, 기존 HTTP를 통한 모든 접속 시도 역시 HTTPS로 전환(리다이렉트)되도록 적용해야 합니다.
예를 들자면, 공개적으로 접근 가능한 프로필을 통해서든 HTTP응답에 반영되는 방식을 통해서든 사용자 이름이나 이메일 주소가 노출되지 않도록 웹사이트를 점검해야 합니다. 
Don't count on users for security
보안에 있어 사용자(유저)를 믿지 마세요.

보안을 강화하면 사용자 입장에서 조금 번거로워집니다.
인간의 본성상 이런 번거로움을 줄일 방법을 찾아내는 것은 일반적으로 당연한 일입니다. 그러니 가급적 모든 곳에서 사용할 수 있는 안전한 방식이 강제로 적용되게 해야합니다. 가장 대표적인 예로 효과적인 비밀번호 정책을 적용하는 것입니다.
기존의 비밀번호 정책들이 실효성을 잃는 이유는, 사람들이 정책에 맞춰 억지로 작성한 비밀번호가 예측 가능하기 때문입니다.
대신 간단한 비밀번호 검사 프로그램을 도입하는 것이 더 효과적일 수 있습니다. 이 프로그램은 사용자가 비밀번호를 설정할 때, 비밀번호의 안전성에 대한 피드백을 실시간으로 제공합니다.
가장 유명한 예로 드롭박스(Dropbox)에서 개발한 자바스크립트 라이브러이인 zxcvbm이 있습니다.
비밀번호 검사기에서 높은 점수를 받은 비밀번호만 허용함으로써 기본의 예전 비밀번호 보다 안전한 비밀번호 사용을 더 효과적으로 강제할 수 있습니다.
Prevent username enumeration
계정명이 목록화되지 않도록 하세요.

특정 사용자가 시스템에 존재한다는 사실을 노출할 경우, 해커 입장에서는 계정 인증 메커니즘을 뚫기 더 쉬워집니다. 심지어 웹사이트의 특성상 특정 인물이 계정을 가지고 있다는 사실 자체가 민감한 정보가 되는 상황들도 있습니다. 
해킹을 시도한 사용자 계정이 유효하든 아니든 똑같고 내용의 오류메시지를 사용하는 것이 중요합니다. 그리고 그 메시지들이 똑같은지 확인하는 작업도 해야합니다. 각각 로그인 요청에 대해서 똑같은 HTTP 상태 코드를 반환해야하며 최종적으로 서로 다른 상황(계정이 있는 상황이든 아니든) 응답시간을 가능한 구분할 수 없도록 비슷한 속도로 응답하게 만들어야 합니다.