보안은 권한이 없는 사람들로부터 정보를 접근하지 못하게 하고 상태를 보호하는것 으로 간단히 말하면 내 소중한 자료에 허락하지 않은 사람이 손대지 못하는 것입니다. 이렇듯 보안이란것은 권한이 있고 없고를 분명히 정해야 하며, 그에따라서 허용할지, 말아야 할지 조치를 취해야 합니다.
웹서비스에서의 보안은 어떨까요..
일단 웹서비스라는것에 대해서 관련된 사람들을 그룹지어보면 서버를 운영하는 서버관리자, 웹사이트를 운영하는 사이트운영자, 웹사이트를 개발하는 개발자 등이 있습니다. ( 그룹지어지지 못한 분들은 이글의 논외부분이고 보안보다는 아리따움이나 독특한 사이트를 만드시는 분들이기때문에 제외하였습니다. ) 그리고 사이트를 몇년 운영하신 분들은 개발자가 없는 형태로 서버관리자와 사이트운영자만 있는 곳도 있습니다. 이들은 각자에 맞는 웹서비스에서의 역활 충실할때 웹서비스에서도 서로가 만족할만한 결과가 나타나게 됩니다. 물론 웹서비스 보안도 마찬가지 입니다. 서버관리자의 정기적인 서버보안설정과 신속한 패치, 웹사이트 운영자의 내부정보관리, 개발자의 웹서비스 유지보수 및 입력값등의 데이터검증 등이 이루어질때 만족할만한 웹서비스 보안이 이루어졌다라고 말할수 있을것입니다.
하지만 요즘 유행하는 'SQL 인젝션' 을 당해서 데이터가 변조되거나 정상적인 사이트 운영이 어려울때, 사이트 운영자는 서버관리자에게 변경한것이 없는데 문제가 생겼다며 클레임을 합니다. 하지만 서버관리자는 서버의 상태나 네트워크접근에 관련된 부분까지 확인해도 별문제가 없다는 결과를 사이트 운영자에게 설명합니다. 사이트 운영자는 머리로는 이해를 해도(못하는 분들도 상당히 많다는것에 놀란적은 있습니다.) 답답함에 비용지불에 대한 대가를, 서버관리자는 서버상의 문제점이 아니고 특정사이트만의 문제라는것을 이야기하게 됩니다. 그냥 보기에도 완전 다른 이야기입니다.
그런데 이와중에 빠진 분들이 있습니다. 사이트를 만든 개발자들입니다. 물론 사이트 운영에 필요한 유지보수라고 하면서 아무것도 안하고 돈만 잡아먹는 비용이 아까워서 해고를 한경우도 있을수 있고, 나름대로의 사정에 의해서 업무인계도 못한 경우도 있을수 있습니다. 그리고 정말 소수라고 생각하고 싶은 보안은 생각하기엔 너무 바쁜 개발자일수도 있습니다.
'SQL 인젝션' 은 웹서비스의 취약점을 이용한 공격입니다. 즉 웹사이트를 접근하는 어떠한 의도를 가진 누군가가 인위적으로 수정을 가한 값을 정상적인 값으로 사용하기때문에 발생하는 것입니다. 웹서비스를 하는 이상 웹사이트로의 접근을 제한하는것은 소비자를 제한하는 결과와 같아질수 있고, 이는 매출 창출을 위한 행동이라고 볼수 없습니다. 그렇다면 웹서비스를 이용해서 매출을 창출하는 소비자들과 웹사이트 운영자/개발자가 의도하지 않은 접근을 시도하는 사용자를 어떻게 구분하시겠습니까?
" 의도하지 않는 접근을 제한하면 될것입니다. " 이부분은 웹사이트 개발자들이라면, 아니시더라도 조금만 고민해보면 생각해낼수 있는 문제입니다. 바로 입력되는 값의 검증만 되어도 이러한 사용자는 걱정하지 않아도 될것입니다.
그렇다면 서버관리자는 아무런 조치를 하지 않는 것일까요? 제가 아는한 많은 분들도 이러한 문제로 서버상의 보안에 대해서 고민을 하고, 여러가지 방법으로 이를 차단하기 위해 노력을 합니다. 하지만 개발자의 취향과 형식을 모두 갖춘 많은 웹사이트들을 서버관리자가 의도하지 않은 사용자의 접근을 제한하는것은 한계가 있기 마련입니다. 즉, 보다 근본적인 원인을 찾아서 제거해야 안전한 웹서비스를 운영할수가 있게 되는것입니다.
Mass SQL Injection 이라는것이 있습니다. 올해 이전만 하더라도 바로 확인이 가능한 방법을 이용했습니다. 요근래는 정확히는 10월 19일정도 부터 cookie 를 이용해서 웹사이트에 특정 스크립트를 추가하는 추세로 변경되었습니다. 사용자로부터 입력받는 값을 항상 A=A 라는 식으로 생각하고 제작된 사이트의 대다수가 이러한 취약점을 이용해서 사이트에 스크립트가 추가되었고, 그것을 모르고 방문한 소비자들의 PC에 악성코드를 설치하는 것은 결코 서버관리자도, 사이트운영자도, 사이트개발자도 원하는 일은 아닐것입니다.
" 개발자를 혹사시키지 마세요. 그들을 혹사 시키고 야근을 시키면 일찍 퇴근하기 위해서 일을 대충하게 됩니다. 그들이 잘 몰라서, 혹은 귀찮아서 대충 만드는것이 아닙니다. 다 아는것도 그져 시간에 쫓기다 보면 대충하게 되고 넘어가게 되는겁니다. 시간을 가지고 차근차근 프로세스를 밟아야 합니다. "
파일을 보호하기 위해서는 암호화를 하거나 비밀번호를 거는 방법등 여러가지 방법이 있지만 그중 가장 간단한것은 파일이나 폴더의 권한설정(NTFS)을 변경하는것입니다. 파일이나 폴더의 권한설정을 변경하는 방법은 대걔 탐색기를 이용한 방법을 사용하거나 cacls.exe 파일을 이용합니다. 하지만 탐색기와는 달리 cacls.exe 파일을 이용해서 탐색기처럼 자세한 설정을 할수는 없습니다.
간단한 예를 들어보면 특정폴더에 읽기 권한을 주고 싶다고 할경우 다음과 같이 설정을 하면 됩니다.
탐색기
cacls.exe
하지만 cacls.exe 파일의 경우 탐색기의 고급처럼 자세한 설정을 할수가 없습니다. 탐색기의 간단한 권한설정메뉴인 모든권한, 읽기, 쓰기, 바꾸기(쓰기) 가 전부입니다.
파일의 액세스 제어 목록(ACLs)을 화면에 표시하거나 수정합니다. CACLS 파일 이름 [/T] [/E] [/C] [/G사용자:perm] [/R 사용자 [...]] [/P사용자:perm [...]] [/D 사용자 [...]] 파일 이름 지정된 파일의 ACLs를 화면에 표시합니다. /T 현재 디렉터리와 모든 하위 디렉터리에서 지정한 파일을 찾아서 ACLs를 바꿉니다. /E ACL을 대체하지 않고 편집합니다. /C 오류를 무시하고 ACLs를 계속 바꿉니다. /G 사용자:perm 지정된 사용자의 사용 권한을 부여합니다. Perm은 다음과 같습니다: R 읽기 W 쓰기 C 바꾸기(쓰기) F 모든 권한 /R 사용자 지정된 사용자의 사용 권한을 철회합니다. /P 사용자:perm 지정된 사용자의 사용 권한을 바꿉니다. Perm은 다음과 같습니다: N 없음 R 읽기 W 쓰기 C 바꾸기(쓰기) F 모든 권한 /D 사용자 지정된 사용자의 액세스를 거부합니다. 한 명령에 하나 이상의 파일을 지정하는 대표 문자를 사용할 수 있습니다. 한 명령에 하나 이상의 사용자를 지정할 수 있습니다.
하지만 이러한 폴더가 한두군데가 아니라면.. 정말 큰일입니다. 이러한 경우에는 다음과 같은 스크립트를 이용하면 쉽게 처리할수 있습니다.
Microsoft (R) Windows Script Host 버전 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Starting XCACLS.VBS (Version: 5.2) Script at 2008-02-18 오후 1:45:40 Startup directory: "D:\tmp" Arguments Used: Filename is required and was not passed as an argument. ------------------------------------------------------------------ ---------------------------- Usage ------------------------------- ------------------------------------------------------------------ Displays or modifies access control lists (ACLs) of files & directories XCACLS filename [/E] [/G user:perm;spec] [...] [/R user [...]] [/F] [/S] [/T] [/P user:perm;spec [...]] [/D user:perm;spec] [...] [/O user] [/I ENABLE/COPY/REMOVE] [/N [/L filename] [/Q] [/DEBUG] filename [Required] If used alone, it Displays ACLs. (Filename can be a filename, directory name or wildcard characters and can include the entire path. If path is missing, its assumed to be under the current directory. Notes: - Put filename in quotes if it has spaces or special characters such as &, $, #, etc. - If Filename is a directory, all files and sub directories under it will NOT be changed unless the /F or /S is present. /F [Used with Directory or Wildcard] This will change all files under the inputed directory but will NOT traverse sub directories unless /T is also present. If filename is a directory, and /F is not used, no files will be touched. /S [Used with Directory or Wildcard] This will change all sub folders under the inputed directory but will NOT traverse sub directories unless /T is also present. If filename is a directory, and /S is not used, no sub directories will be touched. /T [Used only with a Directory] Traverses each subdirectory and makes the same changes. This switch will traverse directories only if the filename is a directory or is using wildcards. /E Edit ACL instead of replacing it. /G user:GUI Grant security permissions similar to Windows GUI standard (non-advanced) choices. /G user:Perm;Spec Grant specified user access rights. (/G adds to existing rights for user) User: If User has spaces in it, surround it in Quotes If User contains #machine#, it will replace #machine# with the actual machine name if its a non-domain controller, and replace it with the actual domain name if it is a domain controller. New to 3.0: User can be a string representing the actual SID, but MUST be lead by SID# Example: SID#S-1-5-21-2127521184-160... (SID string shown has been shortened) (If any user has SID# then globaly all matches must match the SID (not name) so if your intention is to apply changes to all accounts that match Domain\User then do not specify SID# as one of the users) GUI: Is for standard rights and can be: Permissions... F Full control M Modify X read & eXecute L List folder contents R Read W Write Note: If a ; is present, this will be considered a Perm;Spec parameter pair Perm: Is for "Files Only" and can be: Permissions... F Full control M Modify X read & eXecute R Read W Write Advanced... E Synchronize D Take Ownership C Change Permissions B Read Permissions A Delete 9 Write Attributes 8 Read Attributes 7 Delete Subfolders and Files 6 Traverse Folder / Execute File 5 Write Extended Attributes 4 Read Extended Attributes 3 Create Folders / Append Data 2 Create Files / Write Data 1 List Folder / Read Data Spec is for "Folder and Subfolders only" and has the same choices as Perm. /R user Revoke specified user's access rights. (Will remove any Allowed or Denied ACL's for user) /P user:GUI Replace security permissions similiar to standard choices /P user:perm;spec Replace specified user's access rights. For access right specification see /G option (/P acts like /G if there are no rights set for user) /D user:GUI Deny security permissions similiar to standard choices. /D user:perm;spec Deny specified user access rights. For access right specification see /G option (/D adds to existing rights for user) /O user Change the Ownership to this user or group. /I switch Inheritance flag, if omitted default is to not touch Inherited ACL's. Switch can be: ENABLE - This will turn on the Inheritance Flag if its not on already. COPY - This will turn off the Inheritance flag and copy the Inherited ACL's into Effecive ACL's REMOVE - This will turn off the Inheritance flag and will not copy the Inherited ACL's, this is the opposite of ENABLE If switch is not present, /I will be ignored and Inherited ACL's will remain untouched. /SPEC switch Special Permission for Folder and Subfolders only If this switch is used, and the object is a folder, then one of the switches below would be used instead of the default. A - This Folder Only B - This Folder, Subfolders and Files (Default) C - This Folder and Subfolders D - This Folder and Files E - Subfolders and Files Only F - Subfolders Only G - Files Only /L filename Filename for Logging. This can include a path name if the file isn't under the current directory. File will be appended to, or created if it doesn't exit. Must be Text file if it exists or error will occur. If filename is obmitted the default name of XCACLS will be used. /Q Turn on Quiet mode, its off by default. If its turned on, there will be no display to the screen. /DEBUG Turn on Debug mode, its off by default. If its turned on, there will be more information displayed and/or logged. Information will show Sub/Function Enterand Exit as well as other important information. /TIMEWMI Turn on to Time WMI use, only shows up in Debug Mode. /SERVER servername Enter a remote server to run script against. /USER username Enter Username to impersonate for Remote Connections (Requires PASS switch) - Will be ignored if its for a Local Connection. /PASS password Enter Password to go with USER switch (Requires USER switch) Wildcards can be used to specify more than one file in a command. Such as: * Any string of zero or more characters ? Any single character You can specify more than one user in a command. You can combine access rights. Operation Complete Elapsed Time: 0.015625 seconds. Ending Script at 2008-02-18 오후 1:45:40
1. c:\test 폴더에 everyone 사용자가 모든권한을 사용하게 한다. XCACLS.vbs c:\test /E /G everyone:F
2. c:\test 폴더에 대해서 파일을 읽을수만 있게 한다. XCACLS.vbs c:\test /E /P everyone:X
3. c:\test 폴더내의 하위폴더와 파일를 만들수는 있지만 삭제할수는 없게 한다. XCACLS.vbs c:\test /E /P everyone:X /D everyone:A7 참조 Xcacls.vbs를 사용하여 NTFS 권한을 수정하는 방법
감사 정책 설정 감사 정책은 관리자에게 보고할 보안 이벤트를 결정하여 지정된 이벤트 범주 내의 사용자 또는 시스템 활동을 기록합니다. 관리자는 특정 개체를 액세스한 사람, 사용자가 컴퓨터에 로그온하거나 로그오프한 시간, 감사 정책 설정의 변경 여부 등 보안 관련 활동을 모니터링할 수 있습니다.
감사 설정을 구성하지 않으면 보안 사고 발생 시 어떠한 일이 일어났는지 파악하기가 어렵거나 불가능합니다. 그러나 너무 많은 허가된 활동에 대해 이벤트를 생성하도록 감사를 구성하면 보안 이벤트 로그가 불필요한 데이터로 가득 차게 됩니다.
감사 정책 설정 권장 사항
설정
보안강화
높은 보안강화
계정 로그온 이벤트 감사
성공
성공, 실패
계정 관리 감사
성공
성공, 실패
디렉터리 서비스 액세스 감사
정의되지 않음
정의되지 않음
로그온 이벤트 감사
성공
성공, 실패
개체 액세스 감사
감사 안 함
실패
정책 변경 감사
성공
성공
권한 사용 감사
감사 안 함
실패
프로세스 추적 감사
감사 안 함
감사 안 함
시스템 이벤트 감사
성공
성공
[ 계정 로그온 이벤트 감사 ]
MS 기술문서
이 정책 설정을 사용하면 자격 증명 유효성 검사에 대한 이벤트가 생성됩니다.
From Zasfe
( 기술문서의 내용은 당췌 무슨 말인겨..;; )
[ 계정 관리 감사 ]
MS 기술문서
이 정책 설정은 새 사용자 또는 그룹 만들기, 사용자 또는 그룹의 이름 바꾸기, 사용자 계정 사용 또는 사용 안 함, 계정 암호 변경, 계정 관리 이벤트 감사 사용 등에 대한 시도를 추적하는 데 사용됩니다. 이 감사 정책 설정을 사용하면 관리자가 이벤트를 추적하여 사용자 및 그룹 계정이 악의적으로, 실수로 또는 승인을 받고 만들어졌는지 추적할 수 있습니다.
From Zasfe
상당히 중요한 설정입니다. 모든 악의적인 접근자의 1차 목표는 시스템권한을 획득하는 것입니다. 그렇기 위해서 관리자권한을 가진 사용자를 만들거나, 기존 관리자를 가로채기도 하는데 흔히 패스워드를 빼앗겼다라고 말을 하기도 합니다. 이러한 과정을 막는 것이 가장 좋은 방법이지만, 막는 방법은 아직 찾지 못하였습니다. 다만 IISlockdown 처럼 실행파일의 권한을 빼는것으로 비슷한 효과를 볼수는 있습니다.
[ 디렉토리 서비스 액세스 감사 ]
MS 기술문서
이 정책은 도메인 컨트롤러에서 감사 작업을 수행하기 위해서만 사용할수 있습니다. 따라서 이 설정은 워크스테이션 수준에서 정의되지 않습니다.
From Zasfe
도메인 컨트롤러가 아닌 이상 사용할 필요가 없는 설정입니다. 물론 도메인 컨트롤러가 아닌 이상 설정을 해바야 적용되지 않습니다.
[ 로그온 이벤트 감사 ]
MS 기술문서
이 정책 설정은 로그온 세션의 생성 및 소명을 기록하는 이벤트를 생성합니다. 이러한 이벤트는 엑세스된 컴퓨터에서 발생합니다. 대화형 로그인의 경우 로그온한 컴퓨터에서 이러한 이벤트가 생성됩니다. 공유에 액세스하기 위해 네트워크 로그온이 수행된 경우 액세서된 리소스를 호스팅하는 컴퓨터에서 이러한 이벤트가 생성됩니다. 감사설정이 없을 경우, 액세스했거나 액세서를 시도한 사용자를 확인하기 어렵거나 불가능합니다.
From Zasfe
사용자의 접근을 확인할수 있는 가장 확실한 감사정책입니다. 반드시 성공/실패를 설정하시기 바랍니다. 접근방법과 접근내역에 대한 부분을 항시 관리하시기 바랍니다.
[ 개체 액세스 감사 ]
MS 기술문서
이 정책 설정만으로는 어떠한 이벤트도 감사되지 않습니다. 이 정책 설정은 파일, 폴더, 레지스트리 키 또는 프린터와 같이 지정된 SACL(System Access Control list. 시스템 액세스 제어 목록)이 있는 개체에 액세스하는 사용자의 이벤트를 감사할지 결정합니다. 사용자,컴퓨터/검색유형/성공,실패액세스이벤트 정보가 남게 됩니다.
From Zasfe
악의적인 접근이 예상되는 부분을 감사하기 위한 정책입니다. 물론 기본적으로 감사할 대상에 대해서는 관리자가 등록을 하여야 합니다. ( 관리자분들의 능력을 보여주세요.. ^-^ ) 기술문서의 내용처럼 반드시 감사정책을 넣으시고 폴더나 파일에 대해서 감사규칙을 넣으셔야 합니다.( 모든 부분을 감시할수는 없잖아요.. ^^ㅋ)
[ 정책 변경 감사 ]
MS 기술문서
이 정책 설정은 사용자 권한 할당 정책, Windows 방화벽 정책, 트러스트 정책의 변경이나 감사 정책 자체의 변경을 모두 감사할지 결정합니다. 권장 설정을 하면 공격자가 권한 승격(예를 들어, 프로그램 디버그 권한이나 파일 및 디렉토리 백업 권한 추가)을 시도한 계정 권한을 확인할 수 있습니다.
From Zasfe
악의적인 접근에 의해 변경되는 부분을 감사하기 위한 정책입니다. 물론 이런일이 있으면 안되겠지만, 그게 어디 맘처럼 되나요. 하지만 악의적인 접근이 어떤 일을 하려고 하는지, 어떤 절차를 가지고 진행를 하는지에 대한 기록을 할수도 있음으로인해 차후 발생할수 있는 여지를 줄일수 있습니다. 지금 당장은 어렵더라두요.. T.T
[ 권한 사용 감사 ]
MS 기술문서
이 정책 설정은 사용자가 사용자 권한을 사용하는 각각의 이벤트를 감사할지 결정합니다. 성공 or 실패
From Zasfe
사용자로 하여금 특정 권한을 획득하려는 시도에 대해 감시하는 것입니다. 주로 혀용된 권한을 넘으려다 실패하는 실패 이벤트에 대해서 감시를 합니다.
[ 프로세스 추적 감사 ]
MS 기술문서
이 정책 설정은 프로그램과 관련된 이벤트의 자세한 정보를 감시합니다.
From Zasfe
이 설정은 모든 프로그램에 대한 것으로, 설정을 해보고 싶으시다면 엄청난 로그속에서 해메게 될것입니다.
[ 시스템 이벤트 감사 ]
MS 기술문서
이 정책 설정은 성공 또는 실패한 시스템 이벤트를 모니터링하고 시스템 액세스를 파악하는데 도움이 될 수도 있는 이벤트 레코드를 제공하므로 매우 중요합니다. 시스템 이벤트에는 컴퓨터를 시작하거나 종료하는 작업, 전체 이벤트 로그 또는 전체 시스템에 영향을 미치는 기타 보안 관련 이벤트가 포함됩니다.
From Zasfe
글쎄요.. 별 효용이 있을까 생각이 드는 감사정책입니다. 시스템 이벤트로그가 있기 때문에 굳이 필요가 없을것 같지만, 시스템 이벤트로그의 백업정도로는 사용할수 있을것 같습니다.
댓글을 달아 주세요
제가 호스팅 받고 있는 Cafe24도 비슷합니다. 때문에 문제를 여러번 고처준적이 있습니다.
2008.11.06 18:32 [ ADDR : EDIT/ DEL : REPLY ]역시라는 말이 먼저 생각나네요. ^^
2008.11.07 09:07 [ ADDR : EDIT/ DEL ]감사합니다
매우 위험한 발언이지만 한마디 거들자면..
2008.12.05 23:34 [ ADDR : EDIT/ DEL : REPLY ]웹해킹컬리지의 한 강사는 말합니다.
" 개발자를 혹사시키지 마세요. 그들을 혹사 시키고 야근을 시키면 일찍 퇴근하기 위해서 일을 대충하게 됩니다. 그들이 잘 몰라서, 혹은 귀찮아서 대충 만드는것이 아닙니다. 다 아는것도 그져 시간에 쫓기다 보면 대충하게 되고 넘어가게 되는겁니다. 시간을 가지고 차근차근 프로세스를 밟아야 합니다. "
조금만 신경쓰면 막을수 있는것들인데..누군가의 책임으로 떠넘기고 억지 부리는 사람들이 참 많죠.
그러한 개발자가 있기때문에 시스템엔지니어가 밤을 새는것입니다.
2008.12.08 01:29 [ ADDR : EDIT/ DEL ]개발자만 탓하는것도 문제가 있지만 기본적으로 해야할것을 혹사시킨다는 표현으로 하는것은 장소나 발언자의 위치에비해 아주 적절하지 못하네요.