ragdo11 2025. 5. 20. 17:54

주요정보통신기반 웹 취약 분석 평가 방법 13번째 항목인 불충분한 인증(Improper Authentication/IA)이다.

음 요건 좀 가슴 아픈 기억이 있는데 첫 머기업 면접 최종 면접 때 이 불충분한 인증/인가에 대해 물어봤었는데 대답을 하지 못했다. 보안기사에서 했기도 했고 예전에 학습한 적이 있어서 굉장히 난이도는 쉬운 질문이었으나.. ㅋㅋㅋ 에잉 ㅋ

이런거 대답 못하면 탈락이다 아쉽지도 않다. 면접 준비를 거의 안 하긴 했다. 첫 면접이라 떨려서 제대로 준비하기는 커녕 오히려 실감이 안 나서 그랬던 것 같다.

 

그래서 끝나고 요거에 대해 정리한 글이 있었는데 다시 주통기반을 첨부터 끝까지 정리중이니 개편해서 다시 올려본다.

인증과 인가를 같이 정리했던 이유가 분명 텍스트로(?) 뭐라해야지 아무튼 개념 정리할 때는 그 차이가 분명하게 이해가 된다. 그런데 특정 상황에서 이게 불충분한 인증이냐 혹은 인가냐 했을때 좀 헷갈렸던 것 같다.

 

뭐 그렇게 어려운 건 아니다! 인증과 인가의 특성을 정확히 기억하고 적용하면 어떤 때가 불충분한 인증인지 인가인지 확실히 알 수 있다.

우선 인증은 무엇이냐?? 인증은 사용자가 누구인지 증명하는 것이다. 그럼 불충분한 인증 취약점은 ??? 인증이 불충분한 취약점이다!! 하하! 근데 뭐라 풀어 설명할 게 없다. 진짜 인증을 구현했어야 하는 곳에 인증이 구현되지 못해 일어나는 취약점이라..

 

주통기반에서 제시한 IA들의 예시 2개를 보면

1) 중요정보(개인정보 변경 등) 페이지 접근 시 재인증 여부 확인

CSRF 취약점 공부를 하면서 이 부분은 짚었을 것이다. 사용자 계정의 비밀번호 변경 등 중요한 정보를 다루는 곳에서는 항상 재인증을 해야 한다. 만약 재인증을 하지 않는다면 로그인되어 있는 사용자 계정으로 다른 사용자가 접근할 수 있다면 비밀번호를 변경하여 손쉽게 계정이 탈취가 가능하다. CSRF 공격을 할 때도 재인증을 수행하지 않아 공격 페이로드로 특정 사용자의 계정 비밀번호를 변경할 수 있었다.

 

  • 멀티 팩터 인증

인증을 강화하는 멀티 팩터 인증 방법이다. 정말 중요한 페이지에 패스워드만을 요구하는 경우 패스워드가 도난당한다면 공격자의 추가적인 공격으로 이어질 수 있다. 만약 멀티 팩터 인증으로 2개 이상의 인증을 요구한다면(Sth you have/Sth you are/Sth you know 중 2개 이상. 한 요소로 2개 이상의 인증을 적용한다해도 그것은 MFA가 아님) 패스워드가 탈취당하더라도 접근이 불가능하다.

 

2) 인증 후 페이지에 아이디만을 인증 값으로 하여 변수로 관리되고 있는지 확인

위와 같은 경우는 세션으로 관리되지 않고 파라미터에 아이디값을 받아 인증하여 관리하고 있는 경우이다.

URL/파라미터 변조 취약점이기도 하다. 진짜 말이 안되는 취약점 같아서 발생하기는 할까 싶지만 의외로 보일 수 있는 취약점이다. 나처럼 그냥 혼자서 굉장히 조악한 웹 사이트 만드는 이런 수준을 생각하면 안된다. 실제 웹 사이트는 훨씬 규모가 크고 복잡하게 이루어지기 때문에 외주 개발이나 많은 인력들이 나누어서 개발하게 되는데 세션을 구현해서 바로 제작하기엔 복잡해지기 때문에 먼저 세션을 구현하지 않고 저러한 형태로 하다가 바꾼다고 들었다.

물론 진짜 거대한 기업에서 세션을 구현하지 않는 실수를 하진 않겠지만 소규모 기업들이 더 많다보니..

 

보안설정방법!

  • 중요정보(개인정보 변경 등)를 표시하는 페이지에서는 본인 인증을 재확인하는 로직을 구현하고, 사용자가 인증 후 이용 가능한 페이지에 접근할 때마다 승인을 얻은 사용자인지 페이지마다 검증하여야 함
  • 접근 통제 정책을 구현하고 있는 코드는 구조화, 모듈화가 되어 있어야 함
  • 접근제어가 필요한 모든 페이지에 통제수단(로그인 체크 및 권한 체크)을 구현해야 하며 특히, 하나의 프로세스가 여러 개의 페이지 또는 모듈로 이루어져 있을 때 권한 체크가 누락되는 경우를 방지하기 위해서 공통 모듈을 사용하는 것을 권장함
  • 인증 과정을 처리하는 부분에 Client Side Script(Javascript, VBScript 등)를 사용하면 사용자가 임의로 수정할 수 있으므로 Server Side Script(PHP, ASP, JSP 등)를 통하여 인증 및 필터링 과정을 수행함

이 부분은 좀 중요하다. 내가 글을 정리하면서 한 번은 무조건 다뤘을 것 같은데 클라이언트 단에 인증을 수행하게 하면 안 된다. burp 같은 웹 프록시로 정말 간단하게 우회가 가능하므로 무조건 서버 단에서 인증을 수행하게 해야 한다.