콘텐츠로 이동

D-23: xp_cmdshell 사용 제한

분류: DBMS

중요도: 상


개요

점검 내용

xp_cmdshell의 사용 여부 점검

점검 목적

불필요하게 활성화되어 있는 xp_cmdshell를 제한하여 공격자의 무단 접근 및 악성코드의 실행 위험을 감소시키기 위함

보안 위협

해킹 툴에서 자주 이용되고 있으며, 권한 상승이나 데이터 유출 등의 위험이 존재함

참고

-

점검 대상 및 판단 기준

대상

MSSQL

판단 기준

✅ 양호: xp_cmdshell이 비활성화 되어 있거나, 활성화 되어 있으면 다음의 조건을 모두 만족하는 경우

  1. public의 실행(Execute) 권한이 부여되어 있지 않은 경우
  2. 서비스 계정(애플리케이션 연동)에 sysadmin 권한이 부여되어 있지 않은 경우

❌ 취약: xp_cmdshell이 활성화 되어 있고, 양호의 조건을 만족하지 않는 경우

조치 방법

xp_cmdshell 설정 값을 0 또는 False로 설정

조치 시 영향

xp_cmdshell을 사용하여 운영체제 명령을 실행하던 서비스 및 스크립트가 동작하지 않을 수 있음

점검 및 조치 사례

MSSQL

[ xp_cmdshell 사용이 불필요한 경우 ]

Step 1) SQL Server Management Studio > 개체 탐색기 > 컴퓨터 이름 우클릭 > 패싯 > 일반

Step 2) XPCmdShellEnabled 값 확인

2.1) Microsoft SQL Server Management Studio에서 확인

개체 탐색기를 통한 프로시저 확인

2.2) 퀴리문으로 확인

SELECT name, value FROM sys.configurations WHERE name = 'xp_cmdshell;

참고

value가 1이면 활성화, 0이면 비활성화 되어 있는 상태

Step 3) XPCmdShellEnabled 값을 false로 설정

3.1) Microsoft SQL Server Management Studio에서 설정 SQL Server Management Studio > 개체 탐색기 > 컴퓨터 이름 우클릭 > 패싯 > 일반

3.2) 퀴리문으로 설정

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 0;
GO
RECONFIGURE;
GO

[ xp_cmdshell 사용이 필요한 경우 ]

Step 1) xp_cmdshell의 public 실행 권한 제거

1.1) Microsoft SQL Server Management Studio에서 제거 SQL Server Management Studio > 개체 탐색기 > [컴퓨터 이름] > 데이터베이스 > 시스템 데이터베이스 > master > 프로그래밍 기능 > 확장 저장 프로시저 > 시스템 확장 저장 프로시저 > sys.xp_cmdshell > 마우스 우클릭 > 속성 > 사용권한에서 public에 대한 사용권한에 ‘실행’ 권한 제거

1.2) 퀴리문으로 public에 대한 실행 권한 제거

REVOKE EXECUTE ON master.dbo.xp_cmdshell TO public

Step 2) 서비스 계정(애플리케이션 연동 등)의 sysadmin 권한 제거

2.1) Microsoft SQL Server Management Studio에서 제거 SQL Server Management Studio > 개체 탐색기 > [컴퓨터 이름] > 보안 > 로그인 > [각 계정 선택] > 마우스 우클릭 > 속성 > 서버 역할에서 sysadmin 권한 제거

2.2) 퀴리문으로 서비스 계정의 sysadmin 권한 제거 * sysadmin 권한이 부여된 계정 확인

EXEC sp_helpsrvrolemember 'sysadmin
* sysadmin 권한이 부여된 계정에 대해 권한 제거
EXEC master..sp_dropsrvrolemember @loginame = N'<계정명>', @rolename = N'sysadmin'