본문 바로가기
etc

뽐뿌가 당한 SQL인젝션 해킹, 어떻게 막을 수 있나?

by (주)엠플 2015. 9. 21.

개발단계에서부터 모든 입력값에 적절한 검증절차 설계·구현 중요

 

지난 11일 온라인 커뮤니티 사이트 뽐뿌가 해킹으로 인해 회원 190만 명의 아이디와 비밀번호 등이 유출된 가운데 해커가 해킹 공격에 사용한 SQL 인젝션 기법이 이슈가 되고 있다.

 

 

SQL(Structured Query Language)이란 데이터베이스를 구축·활용·관리하기 위해 사용되는 언어를 말한다. SQL인젝션(SQL Injection)은 일반적으로 공격자가 주소창 혹은 아이디·비밀번호 창에 SQL 명령어를 입력한 후, 웹사이트에 침투해 서버를 제어하고, 해당 서버가 공격 명령어에 따라 데이터베이스 정보를 출력하는 방식이다.

 

 

SQL인젝션으로 인한 해킹 및 정보 유출 사례들

 

2011년 소니픽쳐스 프랑스 웹사이트는 SQL인젝션 공격을 통해 170여 개의 이메일 주소를 탈취당한 바 있다. 이 외에도 소니픽쳐스 러시아, 소니에릭슨, 소니 뮤직 등의 웹사이트도 SQL인젝션 기법으로 해킹당한 바 있다.

 

그런가 하면 지난해 4월 7일에 어나니머스가 해당 기법을 통해 이스라엘 사이트를 공격한 일도 있었다. 이스라엘이 팔레스타인 사람들을 지속적으로 살해, 공격, 납치하고 있어 자신들이 이를 응징하겠다며, 이스라엘의 정보기관으로 알려진 모사드(Mossad)를 비롯한 정부 관련 사이트에 SQL인젝션으로 기밀문서들을 빼냈다.

 

같은 해 8월, 러시아 해킹 그룹이 42만개 웹사이트로부터 12억 개의 사용자 이름과 비밀번호를 확보한 사건에서도 SQL인젝션 공격이 사용됐다. 사이트가 취약한 상태일 경우 사이트를 기억해뒀다가 다시 방문해 데이터베이스에서 정보를 탈취했다.

 

올해 2월에는 워드프레스용으로 나온 플러그인을 타깃으로 한 SQL인젝션 공격으로 1백만 개의 웹사이트가 해킹된 사건도 있었고, 5월 18일, 해커그룹 어나니머스가 WTO 웹사이트에 침투해 대량의 재직자 정보를 유출한 일도 있었다. WTO 해킹사건으로 인해 각국 WTO 웹사이트 구성원들의 개인정보가 유출됐다.

 

이처럼 SQL인젝션 공격은 가장 고전적이지만 해커들이 정보를 탈취하기 위해 가장 애용하는 방법이기도 하다. 그렇다면 SQL인젝션 공격으로 인한 피해를 최소화하려면 어떻게 해야 할까?

 

 

SQL인젝션 공격으로부터 안전할 수 있는 방법

 

SQL인젝션 취약점은 데이터베이스와 연동된 웹 어플리케이션에서 입력된 데이터에 대한 유효성 검증을 하지 않아 발생하는 취약점이다. 취약한 웹 어플리케이션은 사용자로부터 입력된 값을 필터링 과정 없이 넘겨받아 동적 쿼리(Dynamic Query)를 생성한다. 이로 인해 개발자가 의도하지 않은 쿼리가 생성되어 정보 유출에 악용될 수 있다. 그러므로 개발단계에서부터 모든 입력값에 대한 적절한 검증절차를 설계하고 구현해야 한다.

 

한국인터넷진흥원 인터넷침해대응센터(KRCERT)에서 소개한 SQL인젝션 대응방안은 다음과 같다.

 

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

 

두 번째는 안전한 웹사이트 설계와 구현이다. 입력값 검증 절차 문제에서 시작하는 SQL인젝션 취약점은 개발단계에서부터 모든 입력값에 적절한 검증절차를 설계하고 구현하는 것이 중요하다. 사용자가 입력한 값의 크기를 검사하고, 특수문자(“, ‘, ;, /, !, @, $, %, ^, &, * 등)가 있는 경우 위험하지 않은 문자로 치환한 후, 입력값이 허용범위 내에 존재하는지 검사하는 방식이다.

 

세 번째는 데이터베이스의 에러 메시지를 사용자에게 보여주지 않도록 차단하는 것이다. 에러 메시지를 출력함으로써 중요한 데이터베이스 정보가 노출될 수 있기 때문에 보여주지 않는 것이 좋다.

 

네 번째는 웹 방화벽을 활용하는 것이다. 근본적인 문제 해결을 위해서는 프로그램을 보완 조치해야 하지만, 서비스를 제공하는 홈페이지에서 프로그램 수정으로 인한 문제들도 검토·조치해야 하기 때문에 그 시간 동안 웹 방화벽이나 부가적인 보완조치들을 통해 시간을 확보할 수 있다.

 

마지막으로 웹 보안 취약점에 대한 주기적인 점검이다. 개발단계에서 안전하게 설계·구현됐다 하더라도 보안문제들이 여전히 남아있을 수 있기 때문에 이들을 점검하고 진단하는 과정이 필요하다. SQL인젝션의 경우 프로그램 소스 상에서 입력값 검증이 적절히 이뤄졌는지 점검해 보고 웹 취약점 점검 도구를 병행해 점검한다면 SQL인젝션 공격으로부터 비교적 안전한 웹 서비스를 운영할 수 있다.

 

 

출처: 보안뉴스 http://www.boannews.com/media/view.asp?idx=47836&kind=1&sub_kind

민세아 기자 boan5@boannews.com

 

 

댓글