백승호 이글루시큐리티 사이버위협분석팀 차장

[아이티데일리] 이번 회는 자동화 도구를 이용한 공격인 브루트포스, 취약한 보안기능을 이용한 불충분한 인가, 불충분한 세션관리, 데이터 평문전송에 대해 살펴본다.

자동화 도구를 이용한 대표적인 공격으로는 아이디와 비밀번호를 찾기 위해 무작위로 대입 공격을 하는 브루트포스 공격이 있는데, 이는 사전에 정의해 놓은 사전(Dictionary) 공격과 문자열을 조합하여 공격하는 방식이 있다.

브루트포스는 일반적으로 사용자 계정 또는 관리자 계정 생성 시 관리의 편의성을 위해 디폴트 아이디/비밀번호 또는 유추하기 쉬운 아이디/비밀번호를 사용하여 공격자가 쉽게 유추하여 로그인을 성공하게 되는 취약점이다.

공격자는 해당 취약점을 이용하여 관리자 또는 사용자 아이디/비밀번호를 유추하여 인가되지 않은 페이지에 쉽게 접근할 수 있다.

디폴트 계정의 디폴트 비밀번호를 사용하거나, 유추하기 쉬운 아이디와 비밀번호를 사용할 경우 취약한 아이디와 비밀번호의 예는 [표 1]과 같다.

▲ [표 1] 취약한 아이디/비밀번호 예

브루트포스 공격을 예방하기 위해서는 웹 서비스의 회원 가입 정책 중 사용자의 아이디는 test, admin 등 유추하기 쉬운 아이디는 사용을 제한하고, 비밀번호는 길이 및 형태에 비밀번호 정책을 적용하여 비밀번호의 길이, ID 포함 검사, 영문과 숫자의 혼합 여부를 체크하도록 하여야 한다.

비밀번호 생성 규칙은 세 가지 종류 이상의 문자 구성으로 9자리 이상의 길이로 구성된 문자열 또는 두 가지 종류 이상의 문자 구성으로 10자리 이상의 길이로 구성된 문자열로 구성한다. 문자 구성 종류는 소문자, 대문자, 숫자, 특수문자를 의미한다.

비밀번호 생성 시 간단한 문자(영어단어 포함)나 숫자의 연속사용, 키보드 상에서 일련화 된 배열을 따르는 비밀번호, 사전에 있는 단어, 이를 거꾸로 철자화한 단어, 생일, 전화번호 등 개인정보 및 아이디와 비슷한 추측하기 쉬운 비밀번호 사용을 지양하여야 하며, 이전에 사용한 비밀번호는 재사용하지 않도록 하여야 한다.

또한 로그인 5회 실패 시 30분 사용중지 또는 아이디가 잠기도록 하는 계정 잠금 기능도 브루트포스 공격에 대응하기 위한 방법 중 하나이다.

불충분한 인가는 특정 페이지의 접근 권한에 대한 검증 절차 부재로 접근 권한이 필요한 데이터 또는 페이지에 대하여 비인가 된 사용자의 접근이 가능하게 되는 취약점이다.

공격자는 전송되는 URI의 변수 값을 조작하여 전송함으로써 웹 서버로 하여금 공격자가 원하는 행위를 하도록 시도하는데, 취약한 시스템에서는 인가되지 않은 게시판의 글쓰기, 타인의 게시물 수정 및 삭제, 비공개글 열람 등 인가되지 않은 행위가 이루어지게 된다.

때문에 불충분한 인가는 데이터베이스에 직접 접근하지 않더라도 데이터를 조작하거나 삭제할 수 있기 때문에 중요한 취약점 중 하나이다.

글 내용 보기 URI의 http://도메인명/board.php?mode=view&idx=1에서 mode값을 update, modify, edit 등으로 변경하여 다른 사용자의 게시물 수정이 가능한지 여부를 확인한다. 수정 화면으로 접근이 가능하더라도 비밀번호 또는 로그인 사용자의 세션을 검증할 경우 실제 변조는 일어나지 않는다.

또한, 공개, 비공개 글로 구분하여 운영되는 게시판의 경우는 공개 글의 내용보기 클릭 후 URI의 글 번호를 비공개글 번호로 수정하였을 경우 비공개 글이 노출되는지 여부도 확인한다. 비공개 글의 경우 개인 연락처나 민감한 내용들이 포함될 수 있기 때문에 주의 하여야 한다.

대응 방안으로는 히든 필드 값을 그대로 사용하지 말고, 데이터베이스에서 재검색하여 값을 새로 얻어 오거나 히든 필드로 전송된 값들에 대한 검증 절차를 거치도록 소스를 수정한다. 히든 필드로 값을 넘기는 것보다는 세션을 통하여 변수를 저장 관리하는 것이 안전하다.

글쓰기, 수정, 삭제 URI등 사용자의 조작에 의해 변경이 일어날 수 있는 페이지에 대해서는 정상적인 로그인 사용자인지 또는 권한이 허용된 사용자인지 여부를 확인하는 인증절차를 삽입하여 검증된 사용자만 해당 페이지에 접근할 수 있도록 하여야 한다.

불충분한 세션 관리는 인증 시 마다 동일한 세션 ID가 발급되거나, 세션의 만료 기간을 정하지 않아 로그아웃 후 세션이 유효한 상태로 유지되는 경우나 만료 일자를 너무 길게 설정하여 공격자가 만료되지 않은 세션 활용이 가능한 경우 발생 되는 취약점이다.

취약점을 확인하는 방법은 먼저 인증 시 마다 동일한 세션 ID가 발급되는지 확인한다. 인증 후 정상적으로 세션이 생성되면 생성된 세션 ID를 복사한 후 로그아웃을 한 후, 일정기간(약 10분 이상)이 지난 후 해당 페이지에 재접속할 때 복사한 세션 ID를 삽입하여 로그인 상태가 유지 되는지 확인한다.

또한 다른 컴퓨터의 브라우저에 로그인 하지 않은 상태에서 앞서 복사한 세션 ID를 적용시킨 후 원래 컴퓨터에서 사용자가 재 로그인 후 다른 컴퓨터에 적용한 세션이 사용 가능한지 확인한다.

불충분한 세션 관리 취약점이 존재할 경우 공격자는 세션 재사용을 통해 회원이 아닌 사람이 다른 사람의 정보로 로그인이 가능하다. 관리자의 세션 정보가 재사용된다면 관리자 권한을 획득하는 것이기 때문에 피해가 더 커지게 된다.

불충분한 세션 관리 취약점에 대응하기 위해서는 세션 아이디는 로그인 시 마다 새로운 세션 아이디를 발급 받도록 하며, 이때 생성되는 값은 랜덤으로 생성하여야 하며, 세션 타임아웃 설정을 통해 일정 시간 액션이 없을 경우 자동으로 로그아웃 되도록 설정하여야 한다.

데이터 평문전송은 서버와 클라이언트 간 통신 시 데이터를 암호화하여 전송하지 않아 중요 정보 등이 평문으로 전송되는 취약점이며, 개인정보를 암호화하지 않고 평문으로 전송 처리할 경우 도청을 통해 정보가 노출되는 취약점이다.

웹상의 데이터 통신은 대부분 텍스트 기반이기 때문에 이는 간단한 스니핑(가장 많이 사용되는 해킹(hacking) 수법으로, 이더넷(Ethernet) 상에서 전달되는 모든 패킷(packet)을 분석하여 사용자의 계정과 암호를 알아내는 것)을 통해 쉽게 개인 정보의 탈취 및 도용이 가능해 지며, 현재는 많이 사용하고 있지 않지만 쿠키를 사용할 경우 쿠키 정보의 내용이 암호화 없이 평문으로 전송될 경우도 정보 노출로 인해 피해가 발생할 수 있다.

데이터 평문전송 취약점의 존재여부를 확인하는 방법은 로그인 페이지나 실명인증, 개인정보 수정 등 중요정보를 송수신하는 페이지에 접근하여 패킷 내에 중요 정보가 평문으로 전송되는지 여부를 확인한다.

로그인 페이지에서 아이디, 비밀번호 입력 후 로그인 버튼 클릭 시 전송되는 패킷을 웹 프락시 툴을 이용하여 SSL 통신을 사용하는지 또는 암호화 모듈이 설치되어 중요정보인 비밀번호가 암호화 되어 전송되는지를 확인한다. [그림 1]은 아이디, 비밀번호가 평문으로 전송되는 것을 보여주고 있다.

▲ [그림 1] 로그인 정보 평문 전송

로그인 또는 개인 정보를 사용하는 사이트는 SSL 인증서 또는 암호화 응용프로그램을 설치하여 개인정보 암호화 송·수신을 하여야 한다.

민감한 데이터(자격 증명, 개인정보, 인증 정보 등)가 전송되거나 관리자 시스템을 온라인으로 접근하는 환경에서는 SSL을 사용하여야 하며, 웹 서버와 DB 서버 간의 통신 시에도 TCP/IP 레벨 암호화 등을 적용하는 것이 안전하다.

지금까지 웹 해킹의 여러 가지 기법들과 대응방안들에 대해 살펴봤다. 웹 해킹 대응을 위해 여러 가지 보안장비들이 존재하지만 보안장비에 의존하기 보다는 개발 단계에서부터 환경 설정과 소스코드 개발 시 보안을 고려하여 작성하는 것이 무엇보다 중요하다.

그렇기 때문에 개발자들도 단순한 프로그램 개발에만 집중하는 것이 아니라 보안적인 측면에서도 반드시 고려하여 사전에 예방하고자 하는 노력들이 필요할 것이다.

 

저작권자 © 아이티데일리 무단전재 및 재배포 금지