사용자 정보보호를 위한 필수 보안 요소, 취약한 인증(Broken Authentication)이란?

취약한 세션 관리나 인증관리 허점을 이용하여 공격자가 일반 사용자 또는 관리자로 위장 가능한 웹 어플리케이션 취약점.

 

취약한 세션 관리(Vulnarable Session Management)

취약한 인증이라고 하면 사용자 ID와 패스워드만을 생각하는 경우가 많지만 사용자 세션 관리 또한 포함됩니다. 세션은 일정 시간 동안 사용자 정보를 유지하기 위해 서버 레벨에서 관리하는 일련번호입니다. WAS(Web Application Server)는 사용자가 새로 접속 시 일련번호, 즉 세션 ID를 발급합니다. 세션 ID가 발급되면 동일 사용자가 다른 페이지를 열 때는 해당 ID를 이용하여 브라우저와 서버 사이 통신을 하게 됩니다. 사이트에 한번 로그인하게 되면 매번 새로 로그인하지 않아도 여러 페이지를 탐색할 수 있는 것도 이 때문입니다. 세션 ID는 주로 쿠키의 형태로 저장되거나 웹 요청 시 파라미터 형태로 전달됩니다.

세션은 일반적인 경우 1시간~2시간 정도 유지하도록 설정됩니다. 최근에는 더 나은 사용자 경험을 제공하기 위해서 더 긴 시간(6개월~1년)동안 유지되도록 설정하기도 합니다. 로그인 ID/PW가 공격자에게 노출되지 않더라도 세션이 유지되는 동안 세션 ID가 탈취당하게 된다면 서버는 세션 ID만으로 공격자가 일반 유저인 것으로 인식할 수 있습니다. 한 번이라도 공격자가 탈취한 세션 ID로 유효한 트랜잭션을 만들어낸다면 서버에서 세션 유지시간은 갱신되어 로그인되어 있는 것처럼 유지할 수 있습니다. 인증관리(ID와 PW를 통한 인증 등) 못지않게 세션 관리가 중요한 이유는 이 때문입니다.

 

세션 관리 공격 유형

 

세션 하이재킹(Session Hijacking)

세션 하이재킹은 정상적으로 사용하는 사용자의 세션을 가로채는 일련의 행위를 말합니다. 가장 쉽고 흔한 공격 유형은 사용자가 로그인하여 웹서비스를 사용하던 중 로그아웃하지 않고 자리를 떠났을 때 공격자가 그대로 서비스를 이어서 사용하는 방법입니다. 기술적으로는 일반적으로 텔넷이나 FTP와 같이 암호화되지 않은 TCP세션을 기반의 응용 프로그램을 통해 공격하게 됩니다.

  • 정상적인 TCP세션 수립 절차: 클라이언트 시퀀스와 서버 시퀀스를 서로 동기화하여 통신합니다.

정상적인 TCP세션 수립 절차

 

  • TCP 세션 하이재킹 공격: 공격자가 중간에서 연결을 가로채 공격자와 서버 간 통신을 하게 됩니다.

TCP 세션 하이재킹 공격

 

 

Session ID URL Rewriting Exploit

세션ID세션 ID URL 리라이팅 공격은 세션 ID가 URL상 노출될 때 가능합니다. 누구든 세션 ID를 볼 수 있다면 해당 세션 ID를 가로채 공격에 이용할 수 있습니다. 최근에는 코로나 바이러스로 인해 온라인 원격 수업이 많이 이루어지는데 미국에서 온라인 수업에 무단으로 침입해서 음란한 영상을 내보내는 등 공격이 발생했었습니다. 이른바 줌바밍(Zoombombing)이라고 하는 이 공격도 이러한 취약점을 이용한 공격입니다.

 

세션 고정 취약점 공격(Session Fixation Exploit)

세션 고정 취약점은 로그인 하기 전 발급된 세션 ID가 로그인한 후에도 재사용되는 것을 이용한 취약점입니다. 이를 이용하는 공격자는 사이트에 미리 접속하여 세션 ID를 발급받은 후 이 아이디를 이용해 다른 사용자가 로그인하기를 기다립니다. 다른 사용자가 정상적으로 로그인하면 세션 ID를 이용해 정상적인 사용자처럼 시스템에 접근할 수 있습니다.

  • 공격자는 먼저 사이트에 접속해 세션ID를 발급받은 후 이 아이디를 이용한 다른 사용자가 로그인하기를 기다립니다.

세션 고정 취약점 공격

 

취약한 인증 관리(Vulnarable Credential Management)

인증 관리란 사용자가 사이트에 로그인하는 데 필요한 인증 수단에 대한 관리를 뜻합니다. 가장 널리 사용되고 있는 ID/PW기반 로그인 시스템에서 ID와 패스워드를 어떻게 관리해야 하는지를 의미합니다. 취약한 인증 관리는 사용자 계정과 패스워드를 제대로 관리하지 않아 이를 노출시킬 수 있는 취약점을 의미합니다. 취약한 인증이란 웹 서비스 제공자에게만 책임이 있는 것은 아닙니다. 웹 서비스를 사용하는 사용자 스스로가 본인의 계정과 암호를 노출시키지 않고 안전하게 관리해야 의도치 않은 정보 노출로부터 자신을 지킬 수 있습니다.

 

취약한 인증 공격 유형

 

크리덴셜 스터핑(Credential Stuffing) 공격

어느 한 시스템이 해커로부터 계정 및 암호를 도난당하게 되면 해커는 그 리스트를 판매하는 것이 일반적입니다. 이런 방식으로 취득된 계정 리스트는 다른 사이트를 해킹하는데 이용됩니다. 일반적으로 동일한 계정과 암호를 여러 사이트에 사용하기 때문에 이러한 공격이 가능해집니다.

  • 노출된 인증정보를 봇넷을 이용해 다른 사이트에 적용하는 크리덴셜 스터핑 공격

크리덴셜 스터핑(Credential Stuffing) 공격

 

패스워드 스프레이 공격(Password Spraying)

패스워드 스프레이 공격은 사람들이 많이 사용하는 패스워드를 사용자 계정에 무차별 대입하여 인증을 무너뜨리는 공격 기법입니다. 자릿수가 정해진 생일이나 전화번호, 흔히 사용되는 1234나 qwer과 같은 형식의 패스워드를 나열해 사전을 만들고 이를 사용자 계정에 일일이 대응해 보면서 계정 탈취를 시도하는 방식입니다.

 

피싱(Phising)

피싱은 사람을 속여 정보를 얻어내는 사회공학적 기법입니다. 공격자는 위장 사이트를 만들거나 이메일을 통해 피해자를 유인합니다. 잘 알려진 사이트의 복제 사이트를 만들어 계정 정보를 탈취하기도 하고 이메일을 통해 정상적인 사이트의 관리자인 것처럼 속여 계정 정보를 요구합니다. 특정 타깃을 노리는 스피어 피싱(spear phishing)과 같이 타게팅 공격이 이뤄질 수도 있습니다.

 

 

세션 보안 및 인증 보안

 

세션 보안

1. 세션 만료 시간 설정

서비스의 중요도에 따라서 세션 만료 시간을 적절히 설정해야 합니다. 단순 정보 열람용 사이트의 경우 사용자 편의를 위해 세션 만료를 일주일, 한 달 혹은 그 이상도 설정할 수 있지만 미션 크리티컬(Mission Critical)한 시스템의 경우는 엄격한 세션 관리가 필요합니다. 계정 정보 탈취가 심각한 피해로 이어질 수 있는 은행이나 증권 업무 및 웹어플리케이션의 관리자 사이트 등은 10분~30분 내외로 세션 만료시간을 설정하여 세션 탈취에 대응해야 합니다.

2. 세션 ID 재사용 금지 및 토큰 무효화

세션 고정 공격을 피하기 위해서는 로그인 시마다 새로운 세션 ID를 발급해야 합니다. 또한 세션 ID로 사용되는 토큰은 로그아웃 즉시 무효화하여 재사용되는 것을 방지해야 합니다.

3. 세션 ID의 URL 노출 금지

세션 ID는 계정 정보(ID/PW)와도 같기 때문에 누구나 열람할 수 있는 URL에는 노출하면 안 됩니다. HTTP 요청 헤더에 포함되는 경우도 WAS 설정을 통해 해당 헤더 값이 노출되지 않도록 주의가 필요합니다.

 

인증 보안

1. 다중 인증(Multi-factor Authentication) 도입하기

이메일을 통한 OTP(One Time Password)나 생체인증 등 부가적인 인증을 도입하여 인증을 강화합니다. 크리덴셜 스터핑이 빈번하게 이뤄지는 최근에는 다중 인증이 필수 요소라 할 수 있습니다.

2. 강력한 패스워드 정책(Strong Password Policy)

생년월일이나 휴대폰 번호 등 쉽게 사용자 정보를 통해 유추할 수 있는 패스워드나 1234, qwer 등 단순한 패스워드는 사용을 금지합니다. 최소 8자리 이상의 패스워드를 사용하도록 하고, 영문 대소문자와 특수문자 등을 조합하도록 하여 패스워드를 강화합니다.

3. 패스워드의 평문 노출 금지

패스워드는 어떤 경우에도 평문으로 노출하지 않습니다. 패스워드 찾기의 경우는 새로운 패스워드를 입력하도록 하여야 합니다. 패스워드가 평문으로 노출되면 패킷을 가로채는 행위에 쉽게 패스워드가 노출될 수 있습니다.

4. 로그인 실패 시 메시지 단일화

로그인 실패 시 계정과 패스워드 중 어느 것이 틀렸더라도 동일한 메시지를 출력합니다. 가령 "계정 정보를 찾을 수 없습니다" 라던가 "입력한 패스워드가 맞지 않습니다"와 같이 너무 친절한 메시지를 표시한다면 공격자는 계정 정보 또는 패스워드 한쪽만을 수정하면서 공격을 지속할 수 있습니다.

5. 로그인 시도 횟수 제한하기

단 시간 내 많은 로그인 시도가 일어난다면 무차별 대입 공격(Brute Force Attack) 일 가능성이 높습니다. 일정 횟수 이상 로그인에 실패한다면 캡챠(Capcha)와 같이 자동 입력 방지 수단을 도입하거나 일정 시간 경과 후 다시 로그인을 시도할 수 있도록 방어해야 합니다.

 

 

참고 자료

auth0, What Is Broken Authentication?

최재원, 경성대학교, Shijack 툴을 이용한 Telnet 세션 하이재킹 해킹 기술과 대응방안 연구

Taddong, SAP: Session (Fixation) Attacks and Protections

 

 

다른 글 더 보기

인젝션(Injection), 가장 오래되고 파워풀한 보안 공격

침입탐지 시스템(Intrusion Detection System)

침입방지 시스템(Intrusion Prevention System)

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">