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)
- 변경 후 리부팅하여 변경된 설정을 적용합니다.
'Infrastructure' 카테고리의 다른 글
Virtual PC를 이용한 IE6, IE7 동시에 테스트하는 방법 (0) | 2009.01.28 |
---|---|
TechNet - The Cable Guy - 2004년 2월 : Windows XP 서비스 팩 2에서 수동으로 Windows 방화벽 구성 (0) | 2009.01.25 |
방화벽에 대해 설명할때 (0) | 2009.01.22 |
snort (0) | 2009.01.22 |
Multi Router Traffic Grapher (0) | 2009.01.22 |