시큐어코딩
- home
- 보안소식
- 시큐어코딩
31. [보안 기능] 반복된 인증시도 제한 기능 부재
2019.06.24 17:31
안녕하세요 정보보안 전문기업 지에스인포입니다.
한 주의 시작인 월요일, 모두들 활기차게 보내고 계신가요?
어느덧 6월도 마지막주에 접어들었습니다. 다음주부터는 하반기의 시작인 7월이 시작되는데요, 벌써 2019년도 절반이 지나가고 반환점에 접어들었다니 시간이 참 빠르게 느껴지네요.
지에스인포는 6월이든 7월이든, 때와 장소를 가리지 않고 한결같이 정보 보안을 지키기 위해 노력합니다.
오늘은 행안부 SW 개발보안가이드 중 '보안기능' 카테고리의 마지막 항목인 '반복된 인증시도 제한 횟수 부재' 항목에 대해 알아보고자 합니다.
# 반복된 인증시도 제한 기능 부재 : 일정 시간 내에 여러번의 인증을 시도 할 수 있는 경우 공격자가 예상 ID와 비밀번호를 무차별 대입하여 로그인 성공이 가능한 보안 취약점
여러분, 혹시 옛날에 2g폰을 쓰실 때 시절이 기억나시나요?
그 때는 휴대폰의 비밀번호를 최대 4자리 숫자로 설정 할 수 있었습니다.
따라서 0000부터 9999까지의 숫자 중 하나가 가능했는데요, 이 경우라면 이론적으로 0부터 9999까지 1만개의 비밀번호를 대입 해 본다면 무조건 비밀번호를 해제 할 수 있겠죠?
이와 같이 비밀번호 등의 인증을 요구하는 과정에서 인증시도를 무제한 허용하게 될 경우, 공격자가 예상 ID나 비밀번호들을 사전(Dictionary) 으로 만들어 무차별 대입 (bruteforce) 하여 로그인 권한을 획득하는 보안 취약점이 발생 할 수 있습니다.
따라서 일정 시간 내에 인증시도가 여러번 일어난다면, 계정이 잠기거나 추가 인증을 요구하는 등의 조치를 해 주어야 하는데요. 자세한 사항은 코드 예제와 함께 보시겠습니다.
위의 예제는 로그인 정보를 잘못 입력하였을 경우 다시 입력을 시도하는데 있어 제한이 없습니다. 따라서 공격자는 여러가지 비밀번호로 인증을 재시도하여 올바른 비밀번호를 알아내고 로그인에 성공 할 수 있게 되는데요.
그러한 보안상 위협을 방지하기 위해선 아래와 같이 소스코드를 구현하는 것이 좋습니다.
위의 소스코드에서는 사용자 인증시도 횟수를 기록하는 MAX-ATTEMPTS 변수를 정의하고, 이를 인증시도 횟수를 제한하는 카운터로 사용함으로써 무차별 공격에 대응하는 코드입니다.
이렇게하면 공격자가 무작위로 인증시도를 계속해서 로그인 권한을 획득하는 위험성이 훨씬 줄어들겠죠?
또한 실패한 인증시도에 대한 정보를 로그로 남겨 인증시도 실패 기록을 추적 할 수 있도록 하는 것 역시 중요합니다. 혹여나 악의적 공격이 들어왔을 경우, 미리 탐지하고 예방책을 세우기 위함이지요!
이렇게 철저하게 여러 부분으로 방어벽을 칠 수록 정보의 보안성은 더 높아지고, 사용자는 안전한 환경에서 프로그램을 이용 할 수 있게 된다는 사실. 모두 기억해야겠습니다.
오늘은 SW 개발보안가이드 중 '보안기능' 카테고리의 마지막 항목인 '반복된 인증시도 제한 기능 부재'에 대해 알아보았습니다. 다음번에는 SW 개발보안가이드의 새로운 카테고리 항목에서 새로운 보안정보와 함께 찾아뵙도록 하겠습니다 ^^