1.       소개

기업 보안이 중요시 되고 있는 지금 SQL Injection 에 인한 피해가 급증하고 있습니다.

SQL Injection 공격은 해킹 당한 업체가 피해기관이 되기도 하지만 해당 웹 사이트를 신뢰하고 방문하는 수많은 사용자들을 감염시키는 공격이기도 하여 조치가 시급합니다.

1.1   SQL Injection 이란?

서버나 OS의 구멍을 이용한 해킹방법이 아닌 웹 어플리케이션 자체의 버그를 이용한 형태의 웹 해킹 방법을 의미합니다.

SQL Injection은 데이터베이스로 전달되는 SQL Query를 변경시키기 위해 Web Application에서 입력 받는 파라메터를 변조 및 삽입하여 비정상적인 데이터베이스 접근을 시도하는 기술입니다.

2.       SQL Injection 취약점을 이용한 공격방법

       인증 우회

-         인증을 처리하는 모듈이 입력 값에 대해 적절히 검사하지 않았을 때 공격자는 비정상적인 SQL Query를 삽입할 수 있고 이를 이용해 사용중인 데이터베이스에 영향을 줄 수 있습니다.

-         주로 로그인 창에 적용되는 기법으로 이용자 아이디와 패스워드를 몰라도 로그인할 수 있게 해주는 공격 기법 입니다.

       권한 상승

공격자가 DB의 시스템 권한을 획득한다면, SQL에서 기본적으로 제공하는 확장 프로시저를 이용하여 악성 코드를 삽입하거나 DB를 변경하는 등의 여러 가지 시스템 명령어를 실행시켜 악용할 수 있습니다.

ㄱ)     xp_cmdshell

-         xp_cmdshell은 임의의 명령 실행을 허가하는 내장된 저장 프로시저입니다.

1

-         [ 1] SQL 서버 프로세스의 현재 작업 디렉토리디렉토리 리스트를 얻을 수 있습니다.

2

-         [ 2]는 서버 상의 모든 사용자 리스트를 제공해 줍니다. SQL 서버가 정상적으로 시스템 계정이나 도메인 계정으로 실행할 때, 더 심각한 위협이 됩니다.

ㄴ)     기타 저장 프로시저

-         xp_servicecontrol 프로시저는 사용자가 작동, 정지, 일시 정지 그리고 연속 서비스하는 것을 허가합니다.

-         xp_dirtree 프로시저는 디렉토리 트리 획득을 허가합니다.

-         xp_makecab 프로시저는 사용자가 서버에 압축파일 만드는 것을 허가합니다.

       에러 메시지를 통하여 정보 얻기

-         조작된 URL을 요청하게 되면 홈페이지는 에러 메시지 들을 발생하게 됩니다.

-         에러 메시지 들은 공격자들에게 유용한 정보를 제공하여 쉽게 DB를 열람 및 시스템 명령어를 수행할 수 있습니다.

3.       사전 대응방안

       응용프로그램의 에러정보를 노출하지 않습니다.

       스크립트 오류의 자세한 메시지 표시는 개발 단계에서만 사용을 합니다.

       모든 자료실의 디렉토리 속성에 실행 권한은 제거합니다.

       게시판 등에 불필요한 파일 첨부 기능을 제거하고, 첨부가 필요한 경우 실행 가능한 파일의 첨부를 차단합니다.

       사용자가 입력하는 입력 값이나 URL의 인자 값을 처리하는 페이지에서는 입력 값을 검증합니다.

-         홈페이지 및 게시판에서 사용하는 입력 페이지에서 입력 값에 대한 필터링 합니다.

-         특수문자(‘ “ / \ ; : _ + ) SQL 구문(select, union, insert )필터링 합니다.

       SQL 서버 외부는 항상 노출되어 있기 때문에 SQL 서버에 반드시 잠금 장치를 해야 합니다.

-         불필요한 계정은 삭제합니다.

-         모든 계정의 비밀번호를 어렵게 정하고, 비밀번호 검사를 실행합니다.

-         모든 샘플 DB는 제거합니다.

-         응용프로그램이 DB에 진입하여 사용하는 계정은 최소화 합니다.

       데이터베이스 확장 프로시저는 가급적 모두 제거합니다.

       웹 방화벽을 도입합니다.

4.       SQL Injection 사고 사례

4.1   SQL Injection 취약점을 이용한 악성코드 전파 사례

[ 공격 시나리오 ]

그림 3 SQL Injection 취약점을 이용한 악성코드 전파

       공격자는 홈페이지에 존재하는 SQL Injection 취약점을 이용하여 해킹을 수행하였습니다.

       해킹한 웹 사이트들의 초기 화면에 특정 iframe을 삽입하였으며, 해당 iframe은 사용자를 감염시킬 수 있는 특정 사이트로 접속을 유도하였습니다.

       사용자가 해킹을 당한 웹 사이트에 접근을 한 경우,

       사용자의 PC가 보안패치가 되지 않았을 경우 악성코드 유포 사이트로부터 트로이목마 프로그램 등에 감염이 됩니다.

       감염된 사용자의 ID/PASSWD 등의 정보가 유출됩니다.

4.2   SQL Injection 공격 경유지 악용사고 사례

[ 공격 시나리오 ]

그림 4 SQL Injection 공격 경유지 악용사고

       공격자는 SQL Injection 공격이 가능한 취약한 페이지를 찾기 위해 웹 서핑을 통해 웹 서버에 존재하는 SQL-Injection 취약점을 알아내었습니다. 알아낸 웹 서버의 SQL-Injection 취약 페이지의 ID 필드에 특수문자를 입력하고 들어가면 사용자 인증을 우회할 수 있다는 것을 악용하였습니다.

       SQL Injection의 취약점인 확장 프로시저를 명령어를 수행하여 원격 터미널 서비스가 실행중인 것을 확인하여 관리자 권한을 갖는 사용자 계정을 생성하였습니다.

       원격 터미널 서비스로 해당 시스템에 정상접근 후 각종 SQL Injection 공격도구를 설치하였습니다.

       설치한 SQL Injection 공격도구를 이용하여, 개인정보 및 기타 자료 등을 수집하였습니다.

[출처] 인터넷침해사고대응센터

5.       결론

최근 Windows 웹 서버를 대상으로 발생되고 있는 해킹은 대부분 SQL Injection 공격이 원인입니다.

근본 원인은 웹 사이트가 SQL Injection 공격에 취약하게 개발되어 운영되기 때문입니다.

근본적인 해결 방안은 웹 시스템 구축 이후 문제점을 수정하기 보다는 설계, 개발 단계에서 보안을 고려하여 개발되는 것이 바람직하다고 생각합니다.

개발자가 개발하고자 하는 어플리케이션의 보안을 생각한다면 조금만 신경을 써도 충분히 어느 정도 수준의 예방을 할 수 있을 것입니다.

5.1   웹 서버 보안을 위한 CheckList

       먼저 최신 패치나 서비스 팩을 적용했는지 여부와 정기적으로 자동화 도구를 사용하여 운영체제 및 어플리케이션 보안을 확인합니다.

       불필요한 윈도우 서비스들을 설정하지 않습니다.

       이용하지 않는 계정은 삭제하고, Guest 계정은 항상 disable로 설정합니다.

       불필요한 공유는 없애고, 파일 공유 생성 시 권한에 유의합니다.

       원격터미널 서비스 접속을 제한합니다.

-         윈도우 방화벽에서 원격터미널 서비스로 접속 IP를 지정하여 인가된 IP에게만 접근을 허용합니다.

그림 6 원격터미널 서비스 접속 허용 IP 설정

그림 7 원격터미널 서비스 접속 허용 IP 설정

그림 8 원격터미널 서비스 접속 허용 IP 설정

-         원격터미널 서비스의 포트번호를 변경합니다.

그림 9 원격터미널 서비스 포트번호 변경

-         시작 > 실행 > regedit를 실행시킵니다.

-         HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations

\RDP-Tcp\PortNumber의 값을 [그림 6]과 같이 변경합니다.(default : 3389)

-         변경 후 리부팅하여 변경된 설정을 적용합니다.

 

+ Recent posts