Windows ETC

Mass SQL Injection(Cookie Injection 포함)

2008.11.10 20:57

dhkim 조회 수:35276

SQL Injection공격으로 인한 홈페이지 내 악성코드 삽입피해 주의요망

□ 개요
  o 최근 Windows 기반 웹사이트를 대상으로 SQL Injection 취약점을 공격하는
    해킹도구를 통해 데이터베이스내에 악성코드를 대량으로 삽입하는 사례가
    빈번히 발생하고 있어 홈페이지 관리자들의 각별한 주의가 요구됨
    ※ 해당 해킹도구는 일부 웹 보안 장비의 보안기능을 우회할 수도 있으므로
      주의가 필요

□ 피해 현상
  o  홈페이지 초기화면에 정적(Static)으로 악성코드가 은닉되는 것이 아니라,
    데이터베이스 내 악성코드 링크를 삽입함으로써 해당 데이터베이스와 연동된
    게시판, 상품정보 등 웹 페이지에 악성코드가 동적(Dynamic)으로 삽입됨

 

□ 원인 
  o  게시판이나 회원 인증 등 웹서비스와 데이터베이스가 연동되는 부분에서 전달
    되는 인자값에 대한 검증절차 부재로 인해 악의적인 SQL 명령어 주입이 가능
    하게 됨 (SQL Injection 취약점) 
  o  특히, 최근에는 웹 사이트를 통해 유포되는 악성코드는 쿠키 등 HTTP 헤더정보
    를 통해서도 삽입되고 있고, 일부 웹 보안장비의 보안기능을 우회할 수도 있으
    므로 각별한 주의가 필요 

   

□ (피해 발생시) 복구방법
  o 데이터베이스 백업본 사용
    - 데이터베이스 백업본이 있을 경우 복구에 활용 
  o 악성코드가 삽입된 테이블을 모두 찾아 SQL명령문으로 복구 
   - 반드시 데이터베이스 관리자/개발자와 충분히 검토한 후에 적용 요망 
   - 자료형 변환이 필요 없는 경우 replace함수만으로 복구 가능 

Update [테이블명] set [컬럼명]=replace([컬럼명],'[삭제하고자하는 악성코드 문자열]','')

예> Update freebbs set title=replace(title,'<SCRIPT src=hxxp://www.malcode.tld/b.js></SCRIPT>','')


   - 자료형 변환이 필요한 경우는 cast함수를 이용하여 복구

Update [테이블명] Set [컬럼명] = replace(cast([컬럼명] as varchar(8000)), '[삭제하고자하는 악성코드 문자열]', '')

예> Update freebbs Set contents = replace(cast(contents as varchar(8000)), '<SCRIPT src=hxxp://www.malcode.tld/b.js></SCRIPT>', '')

       ※ 컬럼의 자료형(data type)이 ntext, image 등인 경우 cast함수를

         사용하여 자료형 변환 후 replace가능하지만, replace를 위한 변수

         공간(varchar(8000)) 보다 큰 자료의 경우 자료 손실이 발생 할 수

         있으므로 주의 요망. MS SQL 2005 이상에서는 varchar(max)사용 가능


   - MS SQL 서버에서 사용하는 큰값 자료형 참조 자료
    [1] 큰 값 자료형 설명:
                  http://msdn.microsoft.com/ko-kr/library/ms178158.aspx
    [2] UPDATETEXT 설명:
                  http://msdn.microsoft.com/ko-kr/library/ms189466.aspx

□ 예방대책 
  o 근본적인 해결을 위해 모든 변수값에 유효값 검증 절차 적용
  o 웹사이트에서 사용하는 DB권한의 최소화 및 SA계정 사용 제한 등의
    SQL서버 최적화
  o 웹 보안 솔루션 도입 및 정책 최적화 
   - MS URLscan 관련 자료
     [1] URLscan 사용방법: http://support.microsoft.com/kb/326444/ko
     [2] URLscan 다운로드: http://www.microsoft.com/downloads/details.aspx?FamilyId=EE41818F-3363-4E24-9940-321603531989&displaylang=en
      ※ URLscan은 웹방화벽과 유사하며 서버로 전달되는 값들의 필터링 기능이 지원됨 
   - 공개웹방화벽 관련 자료
     [1] 사용자 커뮤니티: 
                 www.securenet.or.kr > 열린지식 > 공개웹방화벽커뮤니티
   ※ WebKnight에서는 헤더설정의 Injection공격 차단이 설정되어 있어야 차단 가능하며, 
       오탐발생이 예상되므로, 적용 후 일정기간 모니터링 필요

    

     

  o 웹사이트 보안 강화 가이드
   - 웹보안 4종 가이드: www.KrCERT.or.kr접속 > 웹보안 4종 가이드
  o 웹사이트 취약점 점검
   - KISA 무료 웹취약점점검 서비스 http://webcheck.krcert.or.kr
   ※ 비영리단체 또는 중소기업등의 정보보호취약계층만 서비스 대상임
   - MS 소스코드 검사 도구: http://support.microsoft.com/default.aspx/kb/954476
   - HP 점검 도구: http://www.communities.hp.com/securitysoftware/blogs/spilabs/archive/2008/06/23/finding-sql-injection-with-scrawlr.aspx
  o  MS SQL서버에서 sysobjects 또는 syscolumns 권한을 제거하여 악성코드 삽입
     스크립트 실행을 차단할 수 있으나, 운영 환경에 따라 적용 효과에 차이가 있으므로
     추후에 배포될 기술문서에서 안내예정

□ 쿠키 인젝션 개발코딩

' InputFilter
함수는 입력값 검증을 위한 필터링 함수
' CheckLogin
함수는 아이디/비밀번호로 로그인 체크

1. 로그인 인증 성공후 쿠키 생성
<%
Dim UserID : UserID = InputFilter(Request.Form("UserID")) ' SQL Injection
방어를 위해 InputFilter사용

Dim UserPW : UserPW = InputFilter(Request.Form("UserPW"))
Dim Result : Result = CheckLogin(UserID, UserPW)
If Result = True Then
Response.Cookies("www")("userid") = UserID
Else
Response.Write "
인증실패
"
End If
%>

2. 게시판 글쓰기하였을때 로그인한 사용자 아이디를 Writer 필드에 저장
<%
Dim Title : Title = InputFilter(Request.Form("Title")) ' SQL Injection
방어를 위해 InputFilter사용

Dim Content : Content = InputFilter(Request.Form("Content")) ' SQL Injection
방어를 위해 InputFilter사용

Dim Writer : Writer = Request.Cookies("www")("userid") '
쿠키는 그대로 가져와서 사용
<-- 이부분이 필터링을 해주지 않아 문제가 됨

SQL = "Insert Into Board ("
SQL = SQL & "Title, Content,
 Writer "
SQL = SQL & ") Values ( "
SQL = SQL & " '" & Title & "', '" & Content & "', '" & Writer & "') "
Db.Execute SQL ' SQL Injection
에 취약함!!
%>


개발자 자신들이 만든 쿠키는 안전하다는 생각으로, 생성된 쿠키를 이용하는 필드에서는 sql injection 문을 필터링하지 않는게 문제가 된다고 합니다.
통신 중간에 쿠키를 가로채서 변조하는 것이 가능한 만큼 이 문제가 발생하게 되는 것입니다.

대안으로는 로깅설정에서 쿠키를 설정하거나 웹나이트 같은 웹방화벽에서 쿠키로깅을 설정합니다.
이 설정은 대부분 디폴트가 언체크이기 때문에 관리자가 관심을 가져야 겠습니다.

그래서 처음부터 아래와 같이 문제발생 요지를 없애는 것입니다.


Dim Writer : Writer =
InputFileter(Request.Cookies("www")("userid"))

□ 참고사이트
  [1] http://isc.sans.org/diary.html?storyid=3823
  [2] http://isc.sans.org/diary.html?storyid=5092
  [3] http://www.modsecurity.org/blog/archives/2008/01/sql_injection_a.html
  [4] http://www.computerworld.com/action/article.do?command=viewArticleBasic&taxonomyId=16&articleId=9055858&intsrc=hm_topic
  [5] http://www.trustedsource.org/blog/142/New-SQL-Injection-Attack-Infecting-Machines
  [6] http://www.f-secure.com/weblog/archives/00001432.html 



번호 제목 글쓴이 날짜 조회 수
217 IPSEC 을 이용한 Brute Force Attack 차단 방법 file 호스트웨이 2015.08.31 2357
216 Windows 2008 이상 버전에서 디스크정리도구(cleanmgr) 설치 file 호스트웨이 2015.07.31 4994
215 Azure를 이용한 WebApp 다루기 file 호스트웨이 2015.06.29 2912
214 Active Directory Migration 2003R2(32bit) to 2012 file 호스트웨이 2015.05.29 4135
213 Azure를 이용한 웹사이트 및 가성컴퓨터(VM) 생성하기 file 호스트웨이 2015.03.24 2935
212 두개 이상의 네트워크 사용 시 우선순위 설정하기 file 호스트웨이 2014.09.24 12052
211 Windows 2003 / 2008 NTBackup file 호스트웨이 2014.06.26 3722
210 Hyper-V를 이용한 가상서버 OS 설치 방법 file 호스트웨이 2014.05.30 4762
209 Windows 2003 / 2008 FTP 메뉴얼 file 호스트웨이 2013.03.12 2847
208 windows 2012 에 windows 2003 ,XP의 원격 데스크톱 연결 방법 호스트웨이 2012.12.27 3022
207 IIS 6.0 콘솔에서 웹사이트 open시 "다음 오류가 발생했기 때문에 웹 사이트를 열거할 수 없습니다 호스트웨이 2012.12.20 13406
206 find로 특정문자열 추출 file 호스트웨이 2012.12.20 3090
205 DNS 캐쉬 설정 호스트웨이 2012.12.13 11331
204 robocopy를 이용한 백업 file 호스트웨이 2012.12.12 4133
203 [Tip] 도메인이름 생성 규칙 호스트웨이 2012.12.07 3613
202 Windows Server2008/ Server2008R2 성능 카운터 리빌드 하는 밥업 호스트웨이 2012.12.06 10982
201 slmgr 을 이용하여 Windows Server 2012 인증 호스트웨이 2012.12.01 3499
200 아웃룩 첨부파일 차단 해제 file 호스트웨이 2012.12.01 2518
199 outlook 2010 첨부파일 용량제한 해제 호스트웨이 2012.12.01 3223
198 한/영 키 변환 불가 시 호스트웨이 2012.12.01 2767