Database/MS-SQL

[스크랩] SQL 확장 저장 프로시저 제거하기

99iberty 2016. 2. 17. 20:30



http://taeksu.tistory.com/entry/SQL-Server-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EB%B0%8F-%EB%B3%B4%EC%95%88



6. 위험한 확장 저장 프로시저들을 제거하라.
- Xp_cmdshell (쉘 상의 모든 명령들을 수행할 수 있다.)
USE master
GO
IF OBJECT_ID('[dbo].[xp_cmdshell]') IS NOT NULL BEGIN
   EXEC sp_dropextendedproc 'xp_cmdshell'
END
GO
-
- Xp_regread, xp_regwrite (레지스트리를 읽거나 쓰기가 가능)
- Xp_makewebtask (데이터베이스 내의 정보들을 인터넷에 게시할 수 있다.)
- Xp_enumdsn (DNS 정보들을 보고자 하는 경우 사용)
- Sp_dropextendedproc 시스템 프로시저로 제거 할수 있다. Ex) sp_dropextendedproc 'xp_cmdshell'
1) master database
·  확장 프로시저 퍼미션 삭제
·  REVOKE EXECUTE on xp_regread FROM public
·  REVOKE EXECUTE on xp_instance_regread FROM public GO
·  sp_runwebtask 접근을 통한 web task 실행 권한 획득 방지
·  REVOKE EXECUTE on dbo.sp_runwebtask FROM public GO
 2) msdb database
·  Agent Job 접근을 통한 권한 확대 방지
·  REVOKE EXECUTE on sp_add_job FROM public
·  REVOKE EXECUTE on sp_add_jobstep FROM public
·  REVOKE EXECUTE on sp_add_jobserver FROM public
·  REVOKE EXECUTE on sp_start_job FROM public
·  mswebtasks 테이블을 통한 web task 관리 권한 획득 방지
·  REVOKE ALL on dbo.mswebtasks FROM public
·  DTS packages 를 통한 administrator 패스워드 유출 방지
·  REVOKE EXECUTE on sp_enum_dtspackages FROM public
·  REVOKE EXECUTE on sp_get_dtspackage FROM public
·  SQL Agent Password 노출 방지
·  REVOKE EXECUTE on sp_get_sqlagent_properties FROM public
  프로시저들의 Drop후에도 dll 파일은 남아 있으니 아래 쿼리를 실행하여 제거한다.
 ·  dbcc xp_cmdshell(free)
·  dbcc xp_dirtree(free)
·  dbcc xp_regdeletekey(free)
·  dbcc xp_regenumvalues(free)
·  dbcc xp_regread(free)
·  dbcc xp_regwrite(free)
·  dbcc sp_makewebtask(free)
·  dbcc sp_adduser(free)
 다음으로 SQL Injection을 유발시킬 수 있는 시스템 DB상에 존재하는 프로시저들의 EXCUTE권한을 DENY하겠다.  해당 프로시저들을 통해 시스템의 정보를 조회하고 변경할 수 있으니 필수적으로 DENY해야 할 권한들이다.
 
·  DENY  EXECUTE  on [master].[dbo].[xp_subdirs] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_dirtree] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_availablemedia] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_regwrite] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_regread] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_regaddmultistring] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_regdeletekey] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_regdeletevalue] TO [guest] CASCADE 
·  DENY  EXECUTE  on [master].[dbo].[xp_regremovemultistring] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_regaddmultistring] TO [guest] CASCADE
 
 마지막으로 일반 User의 물리적 파일 접근을 제한하기 위해 아래 쿼리를 실행한다.
·  DENY  EXECUTE  on [master].[dbo].[xp_fileexist] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_fixeddrives] TO [guest] CASCADE
·  DENY  EXECUTE  on [master].[dbo].[xp_getfiledetails] TO [guest] CASCADE