Discrete Mathematics

Download Report

Transcript Discrete Mathematics

정보 보안
시스템 보안
최미정
강원대학교 컴퓨터과학전공
이 장에서 다룰 내용
1 계정과 패스워드의 중요성을 이해한다.
2 적절한 패스워드 설정 방법을 익힌다.
3 세션의 의미와 관리 방법을 살펴본다.
4 사용자 및 클라이언트에 대한 접근 제어와 관리 방법을 알아본다.
5 시스템에 존재할 수 있는 취약점의 종류를 알아본다.
6 로그의 의미와 수행 가능한 로그의 범위를 살펴본다.
 인증 수단
 식별 (Identification)
• 아이디라는 문자열을 통해 그 사람이 누구인지 확인하는 과정.
 인증 (Authentication)의 네 가지 방법
• 당신이 알고 있는 것(Something You Know): 군대의 암구어처럼 머릿 속에 기억하고 있는 정보를
이용해 인증을 수행하는 방법
예) 패스워드
• 당신이 가지고 있는 것(Something You Have): 신분증이나OTP(One Time Password) 장치 등을
통해 인증을 수행하는 방법
예) 출입카드
• 당신 모습 자체(Something You Are): 홍채와 같은 생체 정보를 통해 인증을 수행하는 방법.
경찰관이 운전면허증의 사진을 보고 본인임을 확인하는 것도 이에 해당된다고 볼 수 있음.
예) 지문인식
• 당신이 위치해 있는 곳(Somewhere You Are): 현재 접속을 시도하는 위치의 적절성을 확인하는
방법
예) 콜백(Call Back)
 운영체제의 계정 확인
 윈도우: 운영체제에 대한 관리자 권한을 가진 계정을 administrator라고 칭하는데, 이는
시스템에 가장 기본으로 설치되는 계정
 유닉스: 기본 관리자 계정으로 root가 존재.
 계정 생성과 삭제시 적절한 승인 절차가 마련되어 있어야 하고, 불필요한 계정이
존재하는지와 불필요하게 관리자 권한 등이 부여되어 있지 않은지를 주기적으로
확인해야 함.
 윈도우 관리자 계정 확인
 net localgroup administrators 명령
 유닉스 계정 목록 확인
 /etc/passwd 파일
 /etc/passwd 파일의 구성
root : x : 0 : 0 : root : /root : /bin/bash
➊
➋ ➌ ➍
➎
➏
➐
➊ 사용자 계정
➋ 패스워드가 암호화되어 shadow 파일에 저장되어 있음을 나타낸다.
➌ 사용자 번호
➍ 그룹 번호
➎ 실제 이름. 시스템 설정에 영향이 없는 것으로, 자신의 이름을 입력해주어도 된다.
➏ 사용자의 홈 디렉토리 설정. 앞의 예는 관리자이므로 홈 디렉토리가 /root다. 일반 사용자는
/home/wishfree와 같이 /home 디렉토리 하위에 위치한다.
➐ 사용자의 셸 정의. 기본 설정은 bash 셸이다. 사용하는 셸을 이곳에 정의해준다.
• 관리자 권한은 사용자 번호와 그룹 번호로 식별.
• 관리자는 사용자 번호가 0번이고, 그룹 번호도 0.
• root 이외에 사용자 번호가 0번인 계정이 존재하면, 그 계정도 관리자 권한을 가짐
 윈도우 일반 사용자 계정 확인
 net user 명령
 유닉스 일반 사용자 계정 확인
 역시 /etc/passwd 파일에서 확인
• /etc/passwd 파일의 구조에서 ➋와 ➐ 부분을 확인해야 함.
• 리눅스나 유닉스의 옛날 버전에서는 ➋가 빈 것이 패스워드 없이 로그인이 가능한 계정이였으나,
최근의 유닉스는 시스템의 보안 설정으로 인해 로그인이 차단되어 계정이 동작하지 않음.
• ➐도 /bin/sh, /bin/csh, /bin/bash, /bin/ksh와 같이 정상 셸이 아니라 /bin/false처럼
명시적으로 사용이 금지되어 있거나 빈 경우에는 누군가에게 할당된 계정이 아님.
 윈도우 그룹 목록 확인
 net localgroup 명령
 윈도우의 기본 그룹
 유닉스 그룹 목록 확인
 /etc/group
 /etc/group 구조
root : x : 0 : root
➊
➋ ➌
➍
➊ 그룹 이름. 여기서는 root 그룹을 말함.
➋ 그룹에 대한 패스워드를 설정하는데, 일반적으로는 설정되지 않음.
➌ 그룹 번호. 0은 root 그룹.
➍ 해당 그룹에 속한 계정 목록. 하지만 이 목록은 완전하지 않기 때문에 패스워드 파일과 비교해보는 것이 가장 정확.
 데이터베이스의 계정 관리
 MS-SQL에서는 윈도우의 관리자계정으로 데이터베이스에 로그인할 수 있지만
오라클에서는 할 수 없음.
 운영체제와 데이터베이스 계정이 완전히 분리되어 있지 않은 경우 데이터베이스 계정
이외에 운영체제의 계정 역시 잘 확인해야 한다.
 데이터베이스에서도 계정이 운영체제처럼 관리자 계정과 일반 사용자 계정으로 나뉨.
 MS-SQL에서 관리자 계정은 sa(system administrator).
 오라클에서 관리자계정은 sys, system. (sys와 system은 둘다 관리자 계정이지만,
system은 sys와 달리 데이터베이스를 생성할 수 없음.)
 오라클은 Scott이라는 기본 계정이 존재하고, 솔루션을 설치하거나 테이블을 생성할 때
관련 계정이 자동으로 생성되는 경우가 많음. 그리고 그 계정들은 보통 아이디와
패스워드가 동일하기 때문에 불필요한 경우에는 잠금 상태(LOCK)로 바꾸어 주고 그렇지
않은 경우에는 패스워드를 적절히 바꾸어 주어야 함.
 패스워드 관리
 좋지 못한 패스워드의 예
 길이가 너무 짧거나 널(Null)인 패스워드
 사전에 나오는 단어나 이들의 조합
 키보드 자판의 일련 나열
 사용자 계정 정보로 유추 가능한 단어들
 좋은 패스워드
 단어와 간단한 숫자, 특수문자 한두 개를 조합한 적절한 길이의 패스워드
 세션
 사용자와 컴퓨터 또는 두 컴퓨터간의 활성화된 접속
 컴퓨터에서 세션을 적절히 유지하기 위한 보안 사항.
 세션 하이재킹 또는 네트워크 패킷 스니핑에 대응하기 위한 암호화
 세션에 대한 지속적인 인증(Continuous Authentication).
 지속적인 인증
 인증 절차를 거쳐 시스템에 접근하는 데 성공했다면, 얼마 후 같은 아이디로 시스템에 접근하는
사람이 인증에 성공한 처음의 그 사람인가라는 의문에 대한 해답을 찾기 위한 방책
 윈도우 : 화면 보호기
 유닉스 : /etc/default/login이나 /etc/profile과 같이 사용자의 일반 환경을 설정하는
파일에서 타임아웃 값을 명시적으로 설정.
 운영체제의 접근 제어
 접근 제어를 수행해야 할 관리 인터페이스
 inetd 데몬
• 클라이언트로부터 inetd가 관리하고 있는 Telnet이나 SSH, FTP 등에 대한 연결 요청을 받은 후
해당 데몬을 활성화시켜 실제 서비스를 하는, 데몬과 클라이언트의 요청을 연결하는 역할
 TCPWrapper
• TCPWrapper 가 설치되면, inetd 데몬은 연결을 TCPWrapper의 tcpd 데몬에 넘겨줌. tcpd 데몬은
접속을 요구한 클라이언트에 적절한 접근 권한이 있는지 확인한 후 해당 데몬에 연결을 넘겨줌.
이때 연결에 대한 로그도 실시할 수 있음.
 데이터베이스의 접근 제어
 오라클은 $ORACLE_HOME/network/admin/sqlnet.ora 파일에서 IP 에 기반한 접근
제어 설정
 200.200.200.100과 200.200.200.200라는 두 IP의 접근을 허용하고 싶으면 1 과 같이,
200.200.200.150의 접근을 차단하고 싶으면 2 와 같이 추가.
tcp.invited_nodes=(200.200.200.100, 200.200.200.200)
tcp.excluded_nodes=(200.200.200.150)
 MS-SQL은 운영체제처럼 IP에 대한 접근 제어를 기본으로 제공하지 않음.
 네트워크 장비의 접근 제어
 네트워크 장비도 IP에 대한 접근 제어가 가능.
 네트워크 장비에서 수행하는 IP에 대한 접근 제어로는 관리 인터페이스의 접근 제어와
ACL(Access Control List)을 통한 네트워크 트래픽의 접근 제어를 생각할 수 있음.
 네트워크 장비의 관리 인터페이스에 대한 접근 제어는 유닉스의 접근 제어와 거의 같고,
ACL을 통한 네트워크 트래픽에 대한 접근 제어는 방화벽에서의 접근 제어와 기본적으로
같음.
 윈도우의 권한 관리
 윈도우NT 4.0 이후부터는 NTFS(New Technology File System)를 기본 파일
시스템으로 사용.
➊ 모든 권한: 디렉토리에 대한 접근 권한과
소유권을 변경할 수 있으며, 하위에 있는
디렉토리와 파일을 삭제할 수 있음.
➋ 수정: 디렉토리를 삭제할 수 있음. 읽기 및
실행과 쓰기 권한이 주어진 것과 같음.
➌ 읽기 및 실행: 읽기를 수행할 수 있으며,
디렉토리나 파일을 옮길 수 있음.
➍ 디렉토리 내용 보기: 디렉토리내의
파일이나 디렉토리의 이름을 볼 수 있음.
➎ 읽기: 디렉토리의 내용을 읽기만 할 수 있음.
➏ 쓰기: 해당 디렉토리에 하위 디렉토리와
파일을 생성할 수 있으며, 소유권이나 접근
권한의 설정 내용을 확인할 수 있음.
 윈도우의 특정 권한으로는 좀 더 세부적인 쓰기, 읽기 등이 있음.
 윈도우에서 디렉토리 및 파일에 대해 설정되는 접근 권한의 규칙
• 규칙 1 : NTFS 접근 권한은 누적.
• 규칙 2 : 파일에 대한 접근 권한이 디렉토리에 대한 접근 권한보다 우선.
• 규칙 3 : ‘허용’보다‘거부’가 우선
 윈도우에서는 파일 및 디렉토리에 대한 권한을 cacls 명령으로도 확인할 수 있음
 유닉스의 권한 관리
 유닉스는 파일 및 디렉토리에 대한 권한 설정 방법이 모두 같음.
 ls -al 명령으로 해당 디렉토리의 내용을 확인.
-rw-r--r-- 1 oracle dba 312 Nov 30 13:05 listener.ora
➊
➋
➌
➊ 파일의 종류와 권한. 다시 다음 4부분으로 나눌 수 있다.
- rw- r-- r-ⓐ ⓑ ⓒ ⓓ
ⓐ 파일 및 디렉토리의 종류. - 표시는 일반 파일을, d 표시는 디렉토리를 나타냄.
ⓑ 파일 및 디렉토리 소유자의 권한.
ⓒ 파일 및 디렉토리 그룹의 권한.
ⓓ 해당 파일 및 디렉토리의 소유자도 그룹도 아닌 제3의 사용자에 대한 권한.
• 읽기(r: read), 쓰기(w: write), 실행(x: execute)의 권한을 부여.
• 권한은 숫자로 표기할 수도 있음. 읽기는 4, 쓰기는 2, 실행은 1로 바꾸어 환산.
rw- r-- r-- = 42- 4-- 4-- → 644
➋ 파일에 대한 소유자
➌ 파일에 대한 그룹. 유닉스에서 dba 그룹에 속한 계정은 /etc/group에서 dba의 그룹번호로 확인.
 질의문에 대한 권한 관리
 DDL(Data Definition Language)
• 데이터 구조를 정의하는 질의문으로, 데이터베이스를 처음 생성하고 개발할 때 주로 사용하고 운영
중에는 거의 사용하지 않음.
• CREATE: 데이터베이스 객체를 생성한다.
• DROP: 데이터베이스 객체를 삭제한다.
• ALTER: 존재하는 기존 데이터베이스 객체를 다시 정의한다
 DML(Data Manipulation Language)
• 데이터베이스의 운영 및 사용과 관련해 가장 많이 사용하는 질의문으로, 데이터의 검색과 수정
등을 처리.
• SELECT: 사용자가 테이블이나 뷰의 내용을 읽고 선택한다.
• INSERT: 데이터베이스 객체에 데이터를 입력한다.
• UPDATE: 기존 데이터베이스 객체에 있는 데이터를 수정한다.
• DELETE: 데이터베이스 객체에 있는 데이터를 삭제한다.
 DCL(Data Control Language)
• 권한 관리를 위한 질의문.
• GRANT: 데이터베이스 객체에 권한을 부여한다.
• DENY: 사용자에게 해당 권한을 금지한다.
• REVOKE: 이미 부여된 데이터베이스 객체의 권한을 취소한다
 권한 부여와 관련되어 일반적으로 다음과 같은 구조로 적용됨.
 MS SQL에서 권한 관리
 데이터베이스 테이블에 대한 권한 변경시 계정 또는 그룹의 권한 항목만 체크하면 됨.
 With Grant는 내가 A에게 Select에 대한 With Grant 옵션을 부여하면, A가 내 허락을
받지 않고도 C나 F와 같은 다른 사람에게 Select 권한을 부여할 권한을 갖게 해주는
것(일종의 권한 위임)
 오라클(오라클 11g)에서 권한 관리
 권한 부여와 제거 명령어 형식
권한 부여: SQL> grant [권한] on [테이블 이름] to [사용자나 Role];
권한 제거: SQL> revoke [권한] on [테이블 이름] from [사용자나 Role];
 권한 부여와 제거 명령어 예
SQL> grant select on member to wishfree;
SQL> grant select on address to sysweaver;
 권한이 부여된 내역 확인
• wishfree 계정에 부여된 권한 확인
SQL> select * from user_tab_privs where grantee in ('WISHFREE')
 권한 내용을 모두 보고 싶을 때는 조건을 뺀, 즉 select * from user_tab_privs만 입력.
wishfree에게 부여된 Select 권한은 Revoke 명령으로 제거할 수 있음
SQL> revoke select on member from wishfree;
SQL> select * from user_tab_privs where grantee in ('WISHFREE')
뷰
 각 사용자에 대해 참조 테이블의 각 열에 대한 권한을 설정하는 것이 매우 번거롭고
관리가 어려워 만든 가상 테이블.
 Authentication (인증)
 자신의 신원(Identity)을 시스템에 증명하는 과정. 가장 일반적인 경우가 아이디와
패스워드를 입력하는 과정.
 아이디가 신원을 나타내고 패스워드가 정상이면 인증이 됨.
 Authorization (인가)
 올바른 패스워드를 입력해 시스템에 로그인이 허락된 사용자라고 판명되어 로그인되는
과정.
 Accounting
 접근한 객체나 파일에 대한 기록.
 추적을 위한 로그의 충실도를 책임 추적성(Accountability)이라 함.
 윈도우의 로그
 윈도우 2003은 최소한의 로그가 기본으로 설정되어 있어 시스템에 남겨진 로그를 확인 할 수
있음. 윈도우에서는 이벤트 뷰어라는 로그 열람 기능을 제공하는데, 운영체제 수준에서 남기는
거의 모든 로그를 이 기능을 통해 볼 수 있음
 이벤트 뷰어에 표시되는 내용
 윈도우의 로그 정책 설정
 [관리도구]-[로컬 보안 설정]에서 설정
 윈도우의 로그 종류
 유닉스의 로그
 주요 시스템의 로그 디렉토리 위치
• 레드햇 리눅스는 /var/log 디렉토리 아래에 로그 파일이 존재.
 유닉스 로그의 종류
 Last 명령 실행 결과
 데이터베이스 로그
 데이터베이스는 모든 접근 및 실행 SQL 문에 대해 로그를 남길 수 있음.
 하지만 로그를 활성화시키면 CPU 점유율이 30% 가량 상승하는 시스템 자원의 문제
때문에 보안보다 데이터베이스 운영상의 문제점을 확인하기 위해 필요할 때만
활성화시키고, 평소에는 데이터베이스에 대한 간단한 접근 로그만 남기는 것이 일반적임.
 MS-SQL 2000에서는 오른쪽과 같이 로그인
시도에 대한 실패와 성공 로그를 각각 남길 수
있음.
 오라클은 네트워크를 통해 데이터베이스에
로그인하면 $ORACLE_HOME/network/
log/listener.log에 그 기록을 남김.
 데이터베이스에 대한 로그를 남기는 가장 좋은 방법은 별도의 데이터베이스 모니터링
툴을 도입하는 것.
 네트워크에 네트워크 트래픽을 모니터링할 수 있는 태핑(Tapping) 장비를 설치하고,
네트워크 패킷 중 데이터베이스 질의문을 확인하여 이를 로그로 남김.
 네트워크 장비의 로그
 라우터나 스위치는 자체적으로 로그를 남기는 저장공간이 없음. 각 네트워크 장비에서
생성되는 로그를 네트워크를 통해 로그 서버에 전송.
 해커가 어떤 네트워크 장비에 침투하더라도 자신의 흔적을 지우기가 쉽지 않음.
 패치
 마이크로소프트에서는 시스템의 보안 취약점을 확인하기 위한 MBSA(Microsoft
Baseline Security Analyzer)와 같은 툴을 배포하고 있음(http://www.microsoft.com/
technet/security/tools/mbsahome.mspx). MBSA를 이용해 현재 윈도우의 취약점과
적용되어 있지 않은 패치 목록을 확인할 수 있음.
 솔라리스의 패치 관련 사이트(http://sunsolve.sun.com/show.do?target=patchpage)
 응용 프로그램의 보안 설정
 응용 프로그램의 잘못된 설정이 공격자가 운영체제에 침투하는 경로를 제공하는 경우도
많기 때문 운영체제뿐만 아니라 응용 프로그램에 대한 보안 설정도 매우 중요.
 응용 프로그램의 실행 프로세스 권한 설정
 공격자는 응용 프로그램의 취약점을 통해 해당 프로세스의 운영체제 권한을 얻는
것이가능. 따라서 데이터베이스나 다른 응용 프로그램도 필요에 따라 프로세스의 실행
권한을 제한해야 함.
 특히 웹은 취약점이 많이 노출될 수 있어, 윈도우에서는 IIS에서 그 실행 프로세스
권한을 별도로 만들어 사용하고 유닉스에서는 nobody와 같이 제한된 계정 권한을
사용해야 함.
 응용 프로그램의 통한 운영체제의 접근 제한
 응용 프로그램 중에는 해당 응용 프로그램을 통해 운영체제의 파일이나 명령을 실행시킬
수 있는 것이 있음.
 MS-SQL의 xp_cmdshell은 데이터베이스를 통해 운영체제의 명령을 실행하고, 파일
등에 접근할 수 있음.
 응용 프로그램의 동작과 관련하여 운영체제에 접근할 수 있는 함수나 기능이 있으면 그
적절성을 검토해야 함.
 응용 프로그램의 통한 운영체제의 정보 수집 제한
 응용 프로그램이 운영체제에 직접적인 영향을 미치지 않아도 응용 프로그램의 특정 기능이
운영체제의 정보를 노출시키기도 함.
 유닉스에서는 이메일을 보낼 때, 수신자가 있는 시스템의 sendmail 데몬에 해당 계정이
존재하는지 확인하기 위해 일반 계정은 vrfy(verify) 명령을, 그룹은 expn(expansion) 명령을
시스템 내부적으로 사용. 일반 사용자는 다음과 같이 Telnet을 이용해 시스템에 존재하는
계정의 목록을 어느 정도 파악할 수 있음.
 이러한 응용 프로그램의 기능은 제한하는 것이 바람직함.
 불필요한 서비스 및 악성 프로그램의 확인과 제거
 응용 프로그램의 통한 운영체제의 정보 수집 제한
 현재 동작 중인 프로세스의 확인
• 시스템에 동작 중인 악성 프로그램을 확인하기 위해 현재 동작중인 프로세스를 확인하는 것도 매우
중요.
• [Windows 작업 관리자] 창을 이용한 프로세스 확인
 현재 동작중인 프로세스의 확인
• 유닉스에서는 ps -ef 명령을 통해 시스템에서 운영 중인 프로세스를 확인
열린 포트 확인
 악성 프로그램이나 운영 중인 서비스는 열린 포트를 통해서도 확인할 수 있음. 윈도우와
유닉스 모두 netstat -an 명령으로 확인이 가능.
악성 프로그램 탐지 툴 이용
 잘 알려진 악성 프로그램은 대부분 백신 툴 등을 통해 탐지와 제거가 가능. 하지만
리눅스나 유닉스에서는 이런 툴이 많이 부족하기 때문에 수동으로 해야 할 경우가 많음.
무결성 검사
 시스템에 어떤 변화가 일어나는지 테스트.
 MD5 해시 기법을 많이 사용.
 관리자는 주요 파일의 MD5 값을 주기적으로 수집하고, 검사하여 변경되는 파일의
내역을 확인하여, 변경하지 않거나 시스템 운영상 변할 일이 없는 파일이 변경된 것을
발견하면 이에 대한 조치를 할 수 있음.
 4가지 인증 방법
 당신이 알고 있는 것(Something You Know): 계정과 패스워드를 통한 인증
 당신이 가지고 있는 것(Something You Have): 출입 카드 및 스마트 카드 등을 통한 인증
 당신 모습 자체(Something You Are): 생체 인식
 당신이 위치해 있는 곳 (Somewhere You Are): 콜백 등 사용자 위치 정보를 사용한 인증
 계정 관리의 주요 사항
 관리자 권한 등을 소유한 계정의 적절성 검증
 불필요한 계정의 존재 여부 검증
 각 그룹별 권한의 적절성 검증
 좋지 못한 패스워드
 길이가 너무 짧거나 널(Null)인 패스워드
 사전에 나오는 단어나 이들의 조합
 키보드 자판의 일련 나열
 사용자 계정 정보로 유추가 가능한 단어
 세션
 두 컴퓨터간의 활성화된 접속
 접근 제어 적용 순서
① 주요 네트워크 서비스와 관리자 인터페이스 목록 파악
② 주요 네트워크 서비스별로 IP를 통한 접근 제어 수행
 TCP Wrapper를 통한 접근 제어
 윈도우에서 파일과 디렉토리에 대한 권한 규칙
 NTFS 접근 권한은 누적된다.
 파일에 대한 접근 권한이 디렉토리에 대한 접근 권한보다 우선한다.
 '허용'보다 '거부'가 우선한다.
 데이터베이스에서 DCL을 이용한 권한 부여 구조
뷰
 참조 테이블의 각 열에 대한 사용자 권한 설정을 간편하게 관리하기 위한 가상 테이블
 AAA
 Authentication(인증): 자신의 신원을 시스템에 증명하는 과정
 Authorization(인가): 인증이 수행된 객체에 대해 이미 설정된 권한 구성에서 객체가 요구하는
접근 권한 부여의 적절성을 확인하는 과정
 Accounting: 접근에 성공한 객체에 대한 로그
 윈도우의 로그 종류
 유닉스의 로그 종류
 취약점 관리

패치: 버퍼 오버플로우나 포맷 스트링과 같이 응용 프로그램 자체에 있는 취약점에 패치를
적용해 이를 제거한다.

응용 프로그램 관리: 응용 프로그램을 통해 시스템에 접근할 수 없도록 응용 프로그램을 통한
운영체제로의 접근 경로를 제거한다. 그리고 응용 프로그램의 취약점을 통해 운영체제에
접근할 경우에도 영향력을 최소화하기 위해 응용 프로그램의 프로세스 권한을 낮게 부여한다.

불필요한 서비스 및 악성 프로그램 탐지: 시스템에 존재하는 불필요한 서비스나 악성
프로그램을 확인하기 위해 시스템의 서비스 포트 및 프로세스를 확인하고 무결성 검사를
수행한다.
정보 보안 개론 9장 끝
58