Download:
Language: Korean
한국정보보보진흥원에서 제작된 문서 입니다.
SQL Ijneciton 방법에 침해를 당한 경우, 레코드를 복구하는 방법에 관려된 내용입니다.
내용중 일부.
-- Mass SQL Injection 피해 DB 일괄 복구 스크립트, 한국마이크로소프트 제공
-- 사고의 특성 상 DB 자료값들이 varchar 또는 nvarchar 등으로 형변환 되거나 제한된 임시 공간에 저장되는 과정이 있어 자료의 유실이나 손상이 발생합니다.
-- 그러므로, 본 복구 스크립트는 이러한 전형적인 Mass SQL Injection 피해를 입은 DB의 복구에만 사용 하시기 바랍니다.
-- 본 복구 스크립트는 DB관리자와 충분히 검토하신 후 적용하셔야 하며, 이에 대한 책임은 전적으로 사용자에게 있습니다.
-- Mass SQL Injection에 대한 자료는 KrCERT/CC 홈페이지(www.KrCERT.or.kr) 보안공지 또는 기술문서를 참조하시기 바랍니다. 2008. 11 KrCERT/CC, webcheck@krcert.or.kr
declare @tab varchar(255), @col varchar(255), @owner varchar(255), @type int
declare table_cursor cursor for select so.name, sc.name, sc.xtype, su.name from sysobjects so inner join syscolumns sc on so.id = sc.id inner join sysusers su on so.uid = su.uid where so.xtype='u' and (sc.xtype=99 or sc.xtype=35 or sc.xtype=231 or sc.xtype=167)
open table_cursor
fetch next from table_cursor into @tab, @col, @type, @owner
while(@@fetch_status=0)
begin
-- varchar, text 또는 nvarchar, ntext 일 경우 MS-SQL 2005 이상의 환경이라면 varchar(max) 또는 nvarchar(max) 으로 변경하여 사용
-- 악성코드 부분을 실제 삭제하려는 악성코드로 수정 (악성코드 예: <script src=hxxp://malcode.tld></script> )
if (@type = 35 or @type = 167)
exec('update ' + @owner + '.[' + @tab + '] set [' + @col + '] = replace(convert(varchar(8000), [' + @col + ']), ' <악성코드> ','''')')
else
exec('update ' + @owner + '.[' + @tab + '] set [' + @col + '] = replace(convert(nvarchar(4000), [' + @col + ']), ' <악성코드> ','''')')
print '[' + @col + ']' + ' column of ' + @owner + '.' + @tab + ' has been updated.'
fetch next from table_cursor into @tab, @col, @type, @owner
end
close table_cursor
deallocate table_cursor
-- 사고의 특성 상 DB 자료값들이 varchar 또는 nvarchar 등으로 형변환 되거나 제한된 임시 공간에 저장되는 과정이 있어 자료의 유실이나 손상이 발생합니다.
-- 그러므로, 본 복구 스크립트는 이러한 전형적인 Mass SQL Injection 피해를 입은 DB의 복구에만 사용 하시기 바랍니다.
-- 본 복구 스크립트는 DB관리자와 충분히 검토하신 후 적용하셔야 하며, 이에 대한 책임은 전적으로 사용자에게 있습니다.
-- Mass SQL Injection에 대한 자료는 KrCERT/CC 홈페이지(www.KrCERT.or.kr) 보안공지 또는 기술문서를 참조하시기 바랍니다. 2008. 11 KrCERT/CC, webcheck@krcert.or.kr
declare @tab varchar(255), @col varchar(255), @owner varchar(255), @type int
declare table_cursor cursor for select so.name, sc.name, sc.xtype, su.name from sysobjects so inner join syscolumns sc on so.id = sc.id inner join sysusers su on so.uid = su.uid where so.xtype='u' and (sc.xtype=99 or sc.xtype=35 or sc.xtype=231 or sc.xtype=167)
open table_cursor
fetch next from table_cursor into @tab, @col, @type, @owner
while(@@fetch_status=0)
begin
-- varchar, text 또는 nvarchar, ntext 일 경우 MS-SQL 2005 이상의 환경이라면 varchar(max) 또는 nvarchar(max) 으로 변경하여 사용
-- 악성코드 부분을 실제 삭제하려는 악성코드로 수정 (악성코드 예: <script src=hxxp://malcode.tld></script> )
if (@type = 35 or @type = 167)
exec('update ' + @owner + '.[' + @tab + '] set [' + @col + '] = replace(convert(varchar(8000), [' + @col + ']), ' <악성코드> ','''')')
else
exec('update ' + @owner + '.[' + @tab + '] set [' + @col + '] = replace(convert(nvarchar(4000), [' + @col + ']), ' <악성코드> ','''')')
print '[' + @col + ']' + ' column of ' + @owner + '.' + @tab + ' has been updated.'
fetch next from table_cursor into @tab, @col, @type, @owner
end
close table_cursor
deallocate table_cursor
댓글 없음:
댓글 쓰기