웹 해킹과 보안 완벽 가이드(인증처리)
확인문제
1. 웹 애플리케이션을 진단하면서 joe란 사용자명과 pass란 비밀번호로 로그인했다. 로그인 과정에서 다음과 같은 요청이 이뤄지는 것을 가로채기 프록시로 발견했다.
http://www.wahh-app.com/app?action=login&uname=joe&password=pass
이를 보고 알 수 있는 세 가지 취약점은 무엇인가?
나의 생각(2016.01.07)
1. https가 아닌 http 프로토콜을 이용하여 사용자 아이디와 비밀번호가 평문으로 전송될 가능성이 있다.
2. 매개변수(uname, password)값이 그대로 노출이 되는 get방식을 사용하였다.
3.
2. 직접 사용자 등록을 하게 하는 기능이 어떻게 사용자명 수집 공격에 취약할 수 있는가? 이런 취약점은 어떻게 막을 수 있는가?
나의 생각(2016.01.07)
기존에 존재하는 사용자명과 비교를 하여 공격자에게 중복여부를 알려주게 된다. 그러면 공격자는 무작위 대입법을 사용하여 등록된 회원명을 알아낼 수 있다.
이 취약점을 막기 위해서는 해당 입력값의 결과를 공격자에게 보여지게 해서는 안된다.
"이미 등록된 사용자입니다."와 같은 메세지를 제공함으로써 등록된 회원의 사용자명 수집 공격이 가능한 것이다.
"이미 등록된 사용자 이거나 탈퇴한 사용자입니다"와 같이 불가능한 이유에대한 경우의 수를 늘리거나 "사용자명 규칙에 어긋납니다"와 같이 미미한 정보를 제공해주는 것도 방법이고, 아예 정보를 제공하지 않는 것도 방어책일 수 있다. 굳이 사용자에게 위 정보를 제공할 필요는 없다.(사용자 편위를 위한 것이니)
[그림 1] 잘못된 경우
[그림 2] [그림1]보다 나은 경우
3. 로그인 과정에 다음의 단계를 거친다고 하자.
(a)애플리케이션이 사용자의 사용자명과 비밀번호를 요구한다.
(b)애플리케이션이 미리 사용자가 정한 보안 단어에서 임의로 선택한 특정 위치의 두 글자를 입력하게 한다.
왜 위의 요구사항을 두 개의 별도 단계로 나누어서 요구하는 것인가? 이렇게 두단계로 나누어서 진행하지 않는 경우 어떤 결함이 발생할 수 있는가?
나의 생각(2016.01.07)
지연??
한 단계 안에서 모든 단계가 이루어 질 경우 자동화된 툴을 이용해서든지 빠른 무작위 대입공격이 가능하다. 하지만 두단계로 나누어 설정 시 한 단계에서 이루어지는 것보다 속력을 늦출 수 있다.
4. 다단계 로그인 매커니즘이 첫 번째 사용자명을 묻고 다른 사항들을 이어지는 단계에서 묻는 형태라고 하자. 어떤 항목이라도 사용자가 제대로 답을 하지 못하면 첫 단계로 바로 돌아가는 방식으로 구현돼있다면 이 인증 매커니즘에서 발생할 수 있는문제는 무엇이고 이 취약점을 어떻게 고칠 것인가?
5. 애플리케이션이 피싱방지 메커니즘을 로그인 기능에 같이 구현하고 있다. 사용자 등록 과정에서 애플리케이션이 자체 이미지 데이터베이스에서 제공하는 이미지들 중 사용자가 기억할 이미지를 사용자로 하여금 고르게 한다. 이 로그인 기능은 다음의 단계를 거친다고 하자.
(a) 사용자는 사용자명과 생일을 입력하다.
(b) 위 정보가 맞으면 애플리케이션은 사용자가 원래 골랐던 이미지를 제시하고, 아니면 무작위로 선택된 이미지를 제시한다.
(c) 사용자는 원래 자기가 고른 이미지가 제시 되었는지 확인하고 비밀번호를 입력한다.
이 피싱 방지 메커니즘의 배경에는 사용자가 지금 사용하고 있는 애플리케이션이 진짜이고 누군가에 의해 가짜로 제시된 것이 아니라는 것을 확인할 수 있게 한다는 생각이 깔려 있는데, 진짜 애플리케이션만이 사용자가 최초에 골라둔 이미지가 어느 것인지 제대로 제시할 수 있을 것이라는 생각이다.
이 피싱 방지 메커니즘으로 인해 발생하는 취약점은 무엇인가? 이 메커니즘은 피싱을 방지하는 데 효과적인가?
나의 생각(2016.01.07)
이 피싱 방지 메커니즘으로 인해 발생하는 취약점은 무엇인가?
(a) 사용자명과 생일을 입력값으로 비밀번호를 추측할 수 있는 기회가 될 수 있다.
(b,c)공격자는 기존의 애플리케이션이 제공하는 이미지는 쉽게 DB화 할 수 있다. 가짜 애플리케이션에서 진짜 애플리케이션에서 제공하는 이미지를 일부 제공하여 보여질 수 있으며, 운 좋게도 사용자가 선택했던 이미지가 출력되는 상황이 발생하면 피싱 방지 메커니즘은 무의미하게 된다.
이 메커니즘은 피싱을 방지하는 데 효과적인가?
사용자들의 특성상 로그인절차는 쉬울수록 좋다고 생각하고 보안은 거의 신경쓰지 않는다.(그냥 로그인하기 바쁘다.)
기존의 로그인방식이 실행되어 왔어도 일부 사용자들은 기존의 방식이 없어졌다고 해서 피싱을 의심하지 않을 수 있다.
(왜냐면 로그인해서 원하는 기능을 수행하기 바쁘니깐..한국인의 특성상 성질 급한거는 알아주니..ㅠ)
근본적인 피싱 해결책은 사용자도 의식 못하는 백그라운드에서 처리가 일어나야 한다.