1 / 52

DBA 를 위한 SQL Server Security

DBA 를 위한 SQL Server Security. Microsoft SQL Server Technical Workshop 하성희. 방어해야 하는 대상 ?. 평범한 해커 전문적인 해커 불만을 품은 직원 미숙한 직원 “ 서버에 여유 공간이 필요해서 어떤 . mdf 파일을 삭제했어요. 그리고 어떤 서비스도 중단시켜야 했어요. 그게 잘못되었나요? ”. DBA 가 방어해야 하는 것들 ?. 데이터에 대한 액세스 데이터의 무결성 SQL Server. 필요한 작업. 서버에 대한 액세스 방식을 제한

tyler-mejia
Download Presentation

DBA 를 위한 SQL Server Security

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DBA를 위한 SQL Server Security Microsoft SQL Server Technical Workshop 하성희

  2. 방어해야 하는 대상? • 평범한 해커 • 전문적인 해커 • 불만을 품은 직원 • 미숙한 직원 • “서버에 여유 공간이 필요해서 어떤 .mdf 파일을 삭제했어요.그리고 어떤 서비스도 중단시켜야 했어요. 그게 잘못되었나요?”

  3. DBA가 방어해야 하는 것들? • 데이터에 대한 액세스 • 데이터의 무결성 • SQL Server

  4. 필요한 작업 • 서버에 대한 액세스 방식을 제한 • 데이터에 대한 액세스 방식을 제한 • 잠재적인 공격 대상 제한 • 기능과 응용 프로그램이 더 많아질수록 공격할 지점이 증가한다

  5. 관련되는 것들? • 물리적인 환경 • 네트워크 • NT/2000 • SQL Server • 응용 프로그램 • 데이터베이스 • 데이터 • 정책과 절차

  6. 관련되는 사람들? 데이터베이스 관리 개발 관리 업무 부서 규칙 네트워크 인프라 NT 관리

  7. 물리적 환경 • 건물이 물리적으로 안전한가? • 서버가 있는 곳이 물리적으로 안전한 곳인가? • 컴퓨터를 사용하지 않을 때에는 컴퓨터 잠금이 되어 있는가?

  8. 네트워크 • 가능하다면, 클라이언트가 SQL Server와 통신하기 위하여 “명명된 파이프”를 사용하지 말 것 • 가능하다면, 디폴트 포트를 사용하지 말 것 • 관련 포트들을 차단 • TCP 1433 (디폴트) • UDP 1434 (변경 불가) • TCP 2433 (“서버 숨기기” 옵션을 체크하는 경우의 디폴트) • 라우터와 방화벽에서 액세스를 제한할 것

  9. NT/2000 • 계정 정책 • 강력한 password 설정 • Password가 expire되도록 설정 • Workstation들에 잠금 스크린 세이버 설정 • Administrator 액세스 권한 제한

  10. NT/2000 • NTFS 권한 • Everyone 그룹을 root 레벨 액세스에서 제거할 것 (C: drive, D: drive,등) • SQL Server 디렉터리들은 administrators와 SQL Server 서비스에 사용된 서비스 계정에만 권한을 허용할 것 • SQL Server 서비스 계정은 SQL Server를 위해 필요한 디렉터리들만으로 제한할 것

  11. NT/2000 • 다음의 서버들에는 SQL Server를 설치하지 말 것: • 도메인 컨트롤러 • Exchange Server • Web server • File/print server

  12. NT/2000 • 사용하지 않는 서비스는 비활성화할 것 • 비활성화: • WWW Publishing Service • FTP Publishing Service • SMTP • NNTP

  13. NT/2000 • Everyone 그룹을 제거하고 Administrators 로컬 그룹과 SQL Server 서비스 계정에 대하여 full access를 할당할 것 • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSSQLSERVER • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\INSTANCENAME

  14. NT/2000 • 기타 • 터미널 서비스나 원격 컨트롤 소프트웨어가 서버에 설치되어 있는가? • 어떤 3rd파티 유틸리티들이 서버에 설치되어 있는가? • 바이러스로부터의 보호 • 백업 소프트웨어

  15. SQL Server • 서비스 계정 • SQL Server 서비스 계정과 SQL Agent 서비스 계정에 주어지는 권한을 제한할 것 • 복제, 네트워크 액세스, 원격 데이터 소스, SQL Mail을 위해서는 도메인 사용자가 필요함 • 모든 기능을 활용하기 위해서는 Local Administrator로 액세스하는 것이 필요함

  16. SQL Server • XP_CMDSHELL • 가장 유용하면서 가장 위험한 XP • SQL Server 서비스를 수행하는데 도메인 admin, 로컬 admin, 또는 로컬시스템 계정을 사용하는 경우라면, xp_cmdshell이 가지는 힘을 알고 있어야 함

  17. SQL Server • Trojan 저장 프로시저 • 어떤 프로시저들이 자동으로 수행되는지 확인 • sp_helpstartup (7.0) • sp_procoption (2000) • 공격에 사용할 가능성 있는 프로시저들 • sp_password • sp_help procedures • sp_MSRepl_startup

  18. SQL Server와 Mail • 만약 메일 기능을 전혀 사용하지 않는 경우라면, 다음 저장 프로시저들을 모두 삭제할 것 • xp_startmailxp_stopmail • xp_readmail • xp_sendmail • xp_findnextmsgxp_deletemail

  19. SQL XML 지원 • 필요하지 않은 경우에는 XML 지원 기능을 활성화하지 말 것 • XML 지원 기능을 구성한 경우에는, 가능한 한 많이 XML 지원 기능을 제한할 것 (예를 들어, Xpath 쿼리를 지원하지 않아도 된다면 비활성화)

  20. 기타 • Query governor cost limit 옵션을 튜닝  서비스에 지장을 주는 공격에 대비 보호할 것 • 텍스트 파일 형태의 스크립트에는 login name과 password정보를 기록해 두지 말 것

  21. 사용자 관리 • 사용자 로그인 관리 • 데이터베이스 사용자 관리 • 권한(Permission) 관리 • 역할(Role) 관리

  22. SQL Server 보안 모델 SQL Server 컴퓨터에 연결 SQL Server에게 로그인 인증 요청 SQL Server에 연결 원하는 데이터베이스로 연결 및 액세스 인가 데이터베이스 컨텍스트 설정 원하는 작업 수행 작업 권한 검증 (데이터베이스 내의 모든 작업에 대해 권한 검증)

  23. 사용자 로그인 관리 • 인증 모드 • Windows 통합 인증 / 혼합 모드 인증 • 엔터프라이즈 관리자 : [SQL Server 속성(구성)]  [보안] 탭 • SQL Server 로그인 등록 • sp_addlogin / sp_grantlogin • 엔터프라이즈 관리자 : [보안]  [로그인] • BUILTIN\Administrators 그룹의 구성원인 Windows NT 사용자는 자동으로 sysadmin 서버 역할의 구성원이 됨

  24. 사용자 로그인 관리 • 로그인 삭제 • sp_droplogin • sp_revokelogin : Windows NT 사용자/그룹 로그인 제거 • 데이터베이스 사용자 삭제 후 작업 • 만들 때와 역순

  25. 데이터베이스 사용자 관리 • SQL Server 로그인 등록 후 작업 • 등록 방법 • sp_grantdbaccess : 사용 권장 • sp_adduser : 사용 권장하지 않음 (이전 버전과의 호환성) • 엔터프라이즈 관리자 : 데이터베이스  [사용자]

  26. GRANT 권한관리 • GRANT - 권한 부여 • REVOKE - GRANT 또는 DENY 취소 • DENY - 권한 부여 금지 GRANT REVOKE [DENY] REVOKE - + DENY DENY

  27. Role (역할) • Fixed Server Role • Fixed Database Role • Application Role • 사용자 정의 Role • Public Role

  28. 역할 관리 • 로그인을 고정 서버 역할의 구성원으로 등록 : sp_addsrvrolemember • 데이터베이스 사용자를 고정 데이터베이스 역할의 구성원으로 등록 : sp_addrolemember • 역할을 만들고, 역할에 권한을 설정하고, 역할에 사용자를 추가

  29. Fixed Server Role • Sysadmin • Serveradmin • Setupadmin • Securityadmin • Dbcreator • Processadmin • Diskadmin • Bulkadmin

  30. Fixed Database Role • db_owner • db_accessadmin • db_securityadmin • db_ddladmin • db_backupoperator • db_datareader • db_datawriter • db_denydatareader • db_denydatawriter

  31. Application Role • Login이 아닌 Application을 기준으로 액세스 레벨 설정 • Sp_setapprole

  32. 사용자 정의 Role • Fixed Role로는 부적합한 경우 많음 • 많이 만들어 사용해도 무방함 (Cost 적음) • 데모

  33. 권한 관리 • 대원칙 : 꼭 필요한 최소한의 권한만 부여 • 효율적인 권한 관리 • 권고 사항 • 항상 User가 아닌 Role에 대하여 권한을 부여할 것 • Role을 세분화하여 관리할 것 • Public에게 권한을 부여하지 말 것

  34. Database 레벨 • 권한 관련 권고 사항 • 모든 리소스들에서 Public Role에 대한 권한 제거 • “DENY” 활용 • 만약 누군가가 어떤 것을 보아서는 안 된다면, 볼 수 없도록 확실히 조치할 것 • 저장 프로시저를 사용하여 데이터를 액세스하고, sp 레벨에서 권한을 부여할 것 (테이블 레벨에서 권한을 부여하지 말 것)

  35. 참고 - SQL Injection에 의한 해킹 • Ad-hoc 쿼리를 사용하면, 해커가 다른 SQL 문을 끼워 넣을 수 있는 가능성을 제공함 • SQL injection이 어떻게 동작하는지에 대한 자세한 내용은 www.sqlsecurity.com와 David Litchfield의 whitepaper를 참고하기 바람

  36. 다중 인스턴스 환경 • 다중 인스턴스 고려 사항 • BUILTIN\Administrators를 제거할 것 • 인스턴스별로 별도의 서비스 계정을 사용할 것 • 서비스 계정은 도메인 사용자 계정이나 로컬 사용자 계정을 사용할 것– 도메인 admin이나 localsystem계정은 사용하지 말 것 • 인스턴스별로 NTFS 권한을 개별적으로 설정할 것 • 인스턴스별로 레지스트리를 개별적으로 권한 관리를 할 것

  37. BUILTIN\Administrators 제거 • 시스템 관리자와 DBA는 다른 업무를 수행하며 그러므로 서로 다른 권한을 필요로 함 • 작업 순서 (중요) • Windows 2000/Windows NT 그룹 만들기 & 그룹에 구성원(member) 할당하기 • 예: SQLAdmins • SQL Server에서 SQLAdmins에 대하여 Windows 인증 로그인 허용 & sysadmin Server Role에 추가 • BUILTIN\Administrators 로그인을 삭제 또는 sysadmin Server Role에서 제거 • SQL Server 인증 모드를 Windows 인증만으로 변경 • SQL Server 재시작  변경된 인증 모드 반영

  38. BUILTIN\Administrators 제거 • 작업 순서를 다르게 하면 sysadmin 로그인으로 SQL Server에 로그인할 수 없는 상황이 발생할 수 있음 (Lock out) • 해결 방법 : 레지스트리에서 LoginMode 값 변경 (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MicrosoftSQLServer\<instance_name>\MSSQLServer\LoginMode) • Sa로 로그인해서 재작업 *** Administrators 로컬 그룹의 모든 구성원이 sysadmin 권한을 가지지 않도록 할 것 ***

  39. Data • Encryption • .mdf, .ndf, .ldf 파일에 EFS • significant 프로세싱 오버헤드 추가 유발 • 파일을 non-EFS로 이동하면 Encryption 유실 • 데이터베이스 자체 내에서 Encryption • 3rd파티 유틸리티 • 주의 요망 (Encryption을 해독 가능한지 확인 요망) • 저장 프로시저 Encryption • 주의 요망

  40. Data • 백업을 안전하게 관리 • 백업 테이프 저장 장소 • SQL Server 백업 Encryption • SQL Server 백업과 테이프 백업에 대하여 password 보호가능 • 주의 요망:재난 복구 계획에 영향을 미칠 수 있음

  41. 정책과 절차 • 다음에 대하여 정책 수립: • 누가 SQL Server들에 대한 관리적인 액세스 권한을 가지는지 • 누가 새로운 SQL Server를 설치할 것인지 • 누가 클라이언트 툴에 대한 액세스 권한을 가지는지 • 만약 보안 침범이 발생하거나 누군가 의심스럽다면 어떤 작업을 수행하는지 • 만약 당신이 정책을 수립할 위치에 있지 않다면, 정책을 수립하도록 요청할 것 • 모든 보안 감사와 구성에 대하여 공식적이고 문서화된 절차를 작성할 것

  42. 패치 유지 관리 • Alert 리스트를 다중으로 구독할 것 • Microsoft(http://register.microsoft.com/regsys/pic.asp) • NTBugTraq (http://www.ntbugtraq.com/) • CERT (www.cert.org) • SQL Server에 국한된 내용만 보지 말고, 관련된 내용들을 두루 확인할 것 • 해커들도 Alert 리스트를 구독할 것이므로, 가능한 한 빨리 패치를 적용할 것

  43. 주기적인 보안 감사(audit) • 서비스 팩 점검 • 서버 구성 점검 • 새로운 취약 지점 확인 • Administrator 액세스 감사 • 사용하지 않는 로그인 확인 • 잠재적인 보안 breach 문서화 • 이에 대하여 공식적이고 문서화된 절차 작성

  44. 보안의 빈틈 • “단지 개발용 컴퓨터일 뿐인데…” • MSDE • SA password가 설정되지 않은 상태의 Windows 인증 • 레지스트리 • Windows 인증에서 SQL Server 인증으로의 스위칭 가능 • Password가 setup log 파일에 저장됨 • Q263968 • Password가 외부 DTS 패키지에 저장됨

  45. 일반적인 권고 사항 • 처음부터 보안 고려 (SQL Server 설치~개발 ~ ) • 가능한 한 서버를 여러 가지 기능을 위해 사용하지 말 것 • 모든 사람들이 여러분의 시스템을 해킹하려 할 수 있다고 가정하고 주의할 것 • 감사(Audit) 점검 목록을 설정할 것 • 공식적이고 문서화된 절차를 수립할 것 • 가능한 한 SA 계정을 사용하지 말 것 • SA에 대해서는 강력한 password를 지정할 것 • 복잡한 암호 (대문자, 소문자, 특수기호, 스페이스, 숫자 등 포함)

  46. SQL Server를 안전하게 관리하는 기본적인 원칙 1. 최신 서비스 팩 설치, 보안 패치 설치 2. Microsoft Baseline Security Analyzer (MBSA)를 사용하여 서버 보안 점검 3. 가능한 경우라면 Windows Authentication 모드 사용 4. 서버의 물리적, 논리적 격리 및 주기적 백업 5. 강력한 sa password 설정 6. SQL Server 서비스의 권한 수준 제한

  47. SQL Server를 안전하게 관리하는 방법 7. 방화벽에서 SQL Server 포트 비활성화 (TCP port 1433, UDP port 1434) 8. 안전한 파일 시스템 사용 9. 작업 완료된 setup 파일들 삭제 또는 password 정보 제거 10. SQL Server 연결 실패에 대한 감사 11. 꼭 필요한 최소한의 권한 부여

  48. 보안 관련 사이트 • 일반적인 보안 관련 사이트 • www.cert.org • www.microsoft.com/security • www.securityfocus.com

  49. 보안 관련 사이트 • SQL Server 관련 사이트 • www.microsoft.com/sql/techinfo/administration/2000/securityWP.asp • 많은 주제들에 대하여 다룬 좋은 내용의 whitepaper들이 있음 • www.SQLSecurity.com • Chip Andrews의 사이트 – 보안 점검 목록과 freeware 툴들을 포함하여 좋은 정보들이 있음 • www.ngssoftware.com • David Litchfield의 사이트 – 좋은 내용의 whitepaper들이 있음

  50. • Microsoft Security Baseline Analyzer • (http://download.microsoft.com/download/win2000platform/Install/1.0/NT5XP/EN-US/mbsasetup.msi) • 취약 사항 점검에 좋은 기본적인 툴 • http://www.microsoft.com/korea/technet/security/tools/tools/mbsaqa.asp

More Related