KISA, 동적 SQL사용 지양 등 권고
SQL Injection 공격은 홈페이지와 데이터베이스가 자료를 주고받을 때 공격자가 주입한 SQL 명령문이 실행되면서 발생한다. 이 공격의 주된 목적은 홈페이지 인증우회나 내부정보 유출. 최근에는 홈페이지에 대량의 악성코드를 삽입하기 위해 SQL Injection 공격을 사용하는 경우도 많이 늘었다.
이와 관련해 최근 사고사례나 분석 자료가 계속 발표되고 있다. 허나 자동화된 수법으로 인해 SQL Injection 공격에 따른 피해는 여전하다. 그렇다면 문제의 SQL Injection 공격을 막을 효과적인 대응방안은 없는 것일까?
한국정보보호진흥원(원장 황중연 www.kisa.or.kr)은 최근 발표한 ‘2009년 1월 인터넷침해사고 동향 및 분석월보’를 통해 이 같은 물음에 대한 답을 내놨다. KISA가 밝힌 바에 따르면 몇 가지 대응방안으로 SQL Injection 공격을 막을 수 있으며, 공격 후에도 신속하게 복구에 나설 수 있다.
KISA가 자료에서 제시한 SQL Injection 관련 대응방안과 복구방법은 다음과 같다.
■ SQL Injection 대응방안
1) 동적 SQL사용 지양
데이터베이스와의 연동 부분에서는 동적 SQL을 더 이상 사용하지 말고 저장프로시저를 사용해야 한다. 저장 프로시저를 통해 데이터베이스 연동을 구현한다면 이미 프로시저 내부에서 입력값에 대한 자료 형 검증이 이뤄진다. 또 해당 프로시저의 내부에서만 영향을 끼치기 때문에 보안측면에서도 더욱 더 안전하고 성능이나 유지보수 측면에서도 대단히 효과적이다.
2) 안전한 웹 사이트 설계와 구현
SQL Injection 취약점은 입력값 검증 절차 문제에 기인하므로 개발단계에서부터 반드시 모든 입력값에 대해 적절한 검증절차를 설계하고 구현해야 한다. 입력값의 크기를 검사하고 특수문자가 있는 경우 위험하지 않은 문자로 치환한 후 입력값이 허용범위 내에 존재하는지 검사하는 방식 등등을 통해서다.
3) 웹 서버 보안강화
IIS 웹 서비에서는 기본적으로 웹 서비스의 오류가 발생할 때 자세한 오류 메시지를 접속자에게 표시하게 돼있다. 그러므로 이 설정을 변경하여 공격자가 오류 메시지를 통해 유용한 정보를 수집할 수 없도록 수정해야 한다. 일반적인 SQL Injection 공격의 경우 오류 메시지를 기반으로 정보를 추출하게 되므로 이 설정만 변경해도 방어효과를 볼 수 있다.
4) SQL 서버보안 강화
웹 페이지와 MS-SQL 서버를 연동할 때 데이터베이스의 관리자 계정인 SA계정을 사용하게 되면 공격자가 악용할 수 있으므로 매우 위험하다. 그러므로 반드시 사용자 계정을 사용하고 최소 권한만을 할당해 사용해야 한다. 또한 반드시 필요하지 않은 경우라면 사용자 계정이나 ‘public’ 계정에 할당되어 있는 선택 권한을 제거하는 것이 안전하다.
5) 웹 방화벽 활용
윈도우즈의 IIS 환경이라면 URLScan이나 공개 웹 방화벽 WebKnight를 활용해 보안수준을 향상시킬 수 있다. 특히 WebKnight의 경우는 KrCERT/CC의 공개웹방화벽 안내 페이지에서 각종 가이드와 표준정책 및 기술지원도 제공하고 있다.
6) 웹보안 취약점 점검
설계와 구현에 있어서 안전한 개발절차에 따라 개발되었더라도 존재할 수 있는 보안 문제들을 점검하고 진단하는 과정이 필요하다. 특히 SQL Injection의 경우 프로그램 소스 상에서 입력값 검증이 적절히 이뤄졌는지 점검해보고 웹 취약점 점검 도구를 병행해 점검해본다면 더욱 더 안전한 웹 서비스 운영이 될 것이다.
■ 복구방법
1) 데이터베이스 백업본을 사용한 복구
침해사고가 발생하기 이전의 백업본이 있다면 그 백업본을 이용하여 복구하는 것이 가장 빠를 것이다. 그러나 실시간으로 갱신되는 데이터베이스의 특성상 핫백업과 같이 백업도 실시간으로 이뤄지고 있다면 다행이지만, 대부분의 경우 백업된 시점 이후의 자료 유실이 불가피하다. 그러므로 백업본으로 복구할 때에는 반드시 자료 유실에 대한 충분한 검토가 필요하다.
2) 복구 스크립트 사용
지금까지 발견된 악성코드 삽입 사고는 아무리 많은 레코드에 악성코드가 삽입됐더라도 특정 악성코드 유포지를 담고 있었기 때문에 업데이트 SQL 명령문을 사용해도 충분히 복구할 수 있다. 그러나 실제 적용 전에는 반드시 시험을 거친 후 적용해야 한다.
3) 일괄복구 스크립트 사용
컬럼 단위의 복구 스크립트는 복구대상 컬럼이 많은 경우 적지 않은 시간이 필요하기 때문에 악성코드 삭제를 더 빠르게 수행하고자 한다면 일괄복구 스크립트를 참조하여 적용한다. 일괄복구 스크립트의 전문은 KrCERT 홈페이지의 기술문서에서 찾을 수 있다.
[최한성 기자(boan1@boannews.com)]
<저작권자: 보안뉴스(http://www.boannews.com/) 무단전재-재배포금지>