Home > 전체기사
SQL 인젝션 해킹 공격, 어떻게 대응해야 하나요?
  |  입력 : 2015-03-14 12:06
페이스북 보내기 트위터 보내기 네이버 밴드 보내기 카카오 스토리 보내기

Q. 최근 문제가 되고 있는 SQL 인젝션 공격에 대한 가장 효과적인 대응방법에는 어떤 것이 있나요?


A-1. SQL 인젝션(Injection)은 데이터베이스(DB)와 연동된 웹 어플리케이션에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우, 공격자가 입력 폼 및 URL 입력란에 SQL문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안 취약점을 말합니다.

취약한 웹 어플리케이션에서는 사용자로부터 입력된 값을 필터링 과정 없이 넘겨받아 동적 쿼리(Dynamic Query)를 생성합니다.
이는 개발자가 의도하지 않은 쿼리가 생성되어 정보 유출에 악용될 수 있습니다. 이처럼, SQL 인젝션은 입력값 검증 절차 문제에 기인하므로 개발단계에서부터 반드시 모든 입력값에 대한 적절한 검증절차를 설계하고 구현해야 합니다.


행정자치부 ‘시큐어코딩’ 가이드(2012년 9월 발간)에 따르면, SQL 인젝션을 방지하기 위한 안전한 코딩기법으로 PreparedStatement 클래스와 하위 메소드 executeQuery(), execute(), executeUpdate()를 사용할 것을 권고하고 있습니다.

일반 질의문(Statement)를 사용하면, 쿼리분석→최적화→권한체크→쿼리실행 단계를 매번 거치게 되는데, 이른바 동적 쿼리를 생성하게 되어 SQL 인젝션에 취약할 수 있지만, Prepared Statement를 사용하게 되면, 쿼리분석→최적화를 1번만 거치므로, 매번 실행될 때마다 재컴파일이 필요 없고(선)컴파일된 상태로 여러 번 실행될 수 있으므로, 원천적으로 쿼리 조작을 방지할 수 있습니다.


그러나 완벽하게 코드를 작성했다 하더라도 해당 어플리케이션과 관련없는 서드파티 소프트웨어를 통해 취약점이 생길 수 있으므로 주기적으로 취약점 점검을 통해 보안문제들을 점검하고 진단하는 과정이 필요하며, 새로운 취약점 발견사항에 대해 신속한 보안조치를 통해 웹서버, SQL 서버 보안을 강화할 수 있도록 해야 합니다.

(박정환 한국인터넷진흥원 팀장)


A-2. 현재 기업이나 기관은 SQL 인젝션 공격에 크게 2가지로 대응하고 있습니다. 첫 번째는 보안 솔루션(웹 방화벽 등)으로 대응하는 방법이고 두 번째는 시큐어코딩으로 대응하는 방법입니다. 기업이나 기관은 위 두 가지를 모두 다 적용한 경우와 둘 중 하나만 적용하는 경우로 나뉘는데 보안 솔루션으로 대응하는 것은 디폴트로 룰을 설정해 사용하는 경우 우회 가능성이 있기 때문에 효과적인 대응이 아니며, 가장 효과적인 대응방법은 소스코드단에서 시큐어 코딩을 통해 SQL 인젝션을 방어하는 것이 원천적으로 차단할 수 있습니다.


전체 소스코드에서 DB와 연동된 페이지를 목록화한 후, DB 쿼리문에 들어가는 입력 데이터에 대해 검증을 수행하는지 체크하고 SQL 쿼리 문(select, from, union, where, substr 등) 및 특수문자(',--,/*)가 있을 경우 필터링 및 치환하도록 적용하는 것이 가장 좋은 대응방법입니다.

(손기종 KISA 취약점분석팀 선임연구원/skj@kisa.or.kr)


A-3. 일반적으로 SQL 인젝션 취약점은 웹사이트가 데이터베이스와 연동된 기능 수행 시 사용자의 입력 값으로 쿼리 문자열을 전송했을 때 발생되는 에러나 비정상적인 결과에 DB정보, 인증정보 등 중요정보가 포함되거나 인증우회 등이 발생할 수 있다고 판단할 수 있습니다. 이런 SQL Injection에 대한 효과적인 대응방법으로는 △데이터베이스 쿼리문에 사용되는 문자열 검증 △사용자 입력 값 및 서버로 전송되는 파라미터에 대한 검증 △에러페이지에 대한 오류정보 노출 확인 △DB 접근권한(어플리케이션 접근) 최소화 등의 방법이 있습니다.

(임동철 열심히커뮤니케이션즈 리스크관리실 대리/neo3712@keencomms.com)


A-4. 취약점 진단을 통한 웹사이트 점검, 웹 방화벽 운영, 시큐어코딩 적용 등이 될 수 있으며, 최근 인젝션 툴이 많이 사용되고 있으므로 이러한 패턴을 보안 시스템에서 확인하여 차단하는 것도 필요합니다.

(강정훈 11번가/jhkang@sk.com)


A-5. KISA에서 운영중인 인터넷침해대응센터(Krcert)에 따르면 SQL 인젝션에 대한 대응 방안을 제시하고 있습니다.

첫 번째로 동적 SQL 사용을 지양하는 것입니다. 데이터베이스와의 연동 부분에서는 동적 SQL을 더 이상 사용하지 말고 저장 프로시저를 사용해야 합니다. 지금까지도 많이 사용되고 있는 동적 SQL 완성 방식은 변수의 입력값을 연결시켜 SQL문을 완성(Concatenation of SQL)시키는 형태이므로 공격자의 SQL문 주입이 매우 용이합니다.

그러나 저장 프로시저를 통해 데이터베이스 연동을 구현한다면, 이미 프로시저 내부에서 입력값에 대한 자료형 검증이 이루어지며, 해당 프로시저의 내부에서만 영향을 끼치기 때문에 보안 측면에서도 더욱 더 안전하고, 성능이나 유지보수 측면에서도 대단히 효과적입니다.


두 번째로 안전한 웹사이트 설계와 구현입니다. SQL 인젝션 취약점은 입력값 검증 절차 문제에 기인하므로, 개발단계에서부터 반드시 모든 입력값에 대해 적절한 검증절차를 설계하고 구현해야 합니다. 간략히 검증과정을 요약하면, 입력값의 크기를 검사하고 특수문자가 있는 경우 위험하지 않은 문자로 치환한 후 입력값이 허용범위 내에 존재하는지 검사하는 방식입니다.


세 번째로 오류 내용의 표시를 차단하는 등 웹서버 보안을 강화하는 것입니다. SQL 인젝션에 대한 근본적인 문제 해결을 위해서는 프로그램 보완 조치가 반드시 필요하지만,웹 서버의 보안 강화 설정을 통해서도 보완적인 효과를 볼 수 있습니다.


네 번째로 웹 방화벽의 활용입니다. 웹 보안 취약점의 근본적인 문제 해결을 위해서는 프로그램의 보완조치가 반드시 필요하지만 운영 중인 홈페이지에서 프로그램 수정으로 인한 문제들도 검토해 조치해야 하기 때문에 그 시간 동안은 웹방화벽이나 부가적인 보완조치들을 통해 시간을 확보할 수 있습니다.


마지막으로 웹보안 취약점에 대한 점검입니다. 설계와 구현에 있어서 안전한 개발 절차에 따라 개발됐더라도 존재할 수 있는 보안 문제들을 점검하고 진단하는 과정이 필요합니다. 특히 SQL 인젝션의 경우는 프로그램 소스 상에서 입력값 검증이 적절히 이루어졌는지 점검(White box test) 해 보고 웹 취약점 점검 도구를 병행하여 점검(Black box test)해 본다면 더욱 더 안전한 웹 서비스 운영이 될 것입니다.

KrCERT/CC에서 제공하는 원격 웹 취약점 점검 서비스를 이용하면 웹 취약점 원격 점검 서비스를 제공받을 수 있으며, 점검 신청은 홈페이지(http://webcheck.krcert.or.kr/)에서 접수 받고 있습니다. 다만, 비영리단체나 영세기업 등 정보보호 취약계층을 대상으로 제공하므로 서비스 대상에 해당하는 경우에만 서비스 받을 수 있습니다.

(홍준석 한국산업기술보호협회 관제운영팀 팀장/jun0817@kaits.or.kr)

[김태형 기자(boan@boannews.com)]


<저작권자: 보안뉴스(http://www.boannews.com/) 무단전재-재배포금지>

  •  
  • 7
  • 페이스북 보내기 트위터 보내기 네이버 밴드 보내기 카카오 스토리 보내기


  •  SNS에서도 보안뉴스를 받아보세요!! 
넷앤드 파워비즈 진행 2020년1월8일 시작~2021년 1월8일까지위즈디엔에스 2018파워비즈배너 시작 11월6일 20181105-20200131
설문조사
코로나19 사태로 인해 화상회의, 원격교육 등을 위한 협업 솔루션이 부상하고 있습니다. 현재 귀사에서 사용하고 있는 협업 솔루션은 무엇인가요?
마이크로소프트의 팀즈(Teams)
시스코시스템즈의 웹엑스(Webex)
구글의 행아웃 미트(Meet)
줌인터내셔녈의 줌(Zoom)
슬랙의 슬랙(Slack)
NHN의 두레이(Dooray)
이스트소프트의 팀업(TeamUP)
토스랩의 잔디(JANDI)
기타(댓글로)