실무에서는 취약점 점검 기준 정도 이해하면 좋겠다.
1.유닉스/리눅스 보안
o 시스템 핵심 구조
운영체제는 3가지 구성요소로 구성되어 있다. | |
구분 | 내용 |
커널(Kernel) | о 유닉스 운영체제의 핵심으로, 메인 메모리에 상주하여 컴퓨터 자원을 관리한다. 디바이스(I/O), 메모리, 프로세스 관리 및 시스템 프로그램과 하드웨어 사이의 함수 관리 및 Swap space, Daemon 관리 등을 담당한다. |
쉘(Shell) | о 커널과 사용자 간의 인터페이스를 담당하며, 사용자 명령의 입출력을 수행하며 프로그램을 실행시킨다. о 명령어 해석기/번역기라고도 불린다. |
파일시스템 (File System) |
о 디렉터리, 서브 디렉터리, 파일 등의 계층적인 트리구조를 의미하며, 시스템 관리를 위한 기본 환경을 제공한다. 슈퍼블록, Inode list, 데이터의 3부분으로 구성되어 있다. |
o 커널(Kernel)
- 사용자 프로그램들은 경우에 따라 시스템의 하드웨어나 소프트웨어의 자원을 액세스하게 되는데 커널은 이러한 사용자 프로그램을 관리하는 부분을 말한다.
- 커널은 크게 프로세스, 메모리, 입출력(I/O) 그리고 파일 관리의 네 부분으로 나누어 생각할 수 있으며 이러한 서브시스템은 각기 독립적으로 사용자 프로그램에 의해서 의도되는 서비스를 올바르게 제공하기 위해서 상호 협동적으로 작동하게 된다.
- 또한 커널은 쉘과 상호 연관되어 있어서 쉘에서 지시한 작업을 수행하고 결과물을 돌려보낸다.
o 파일 시스템(File System) - 최상위 레벨의 디렉터리인 root는 “/”로 시작하여 하위에 다음과 같은 디렉터리 계층구조를 이룬다.
구분 | 내용 |
/bin | 시스템 바이너리 파일을 포함하는 디렉터리 기본적으로 실행 가능한 파일: echo, mv, copy, pwd, who 등 |
/etc | 시스템의 환경 설정 및 주요 설정 파일: passwd, hosts, xined.conf 등 시스템 관리를 위한 파일을 포함하는 디렉터리(passwd, hosts, rc 등 포함) |
/tmp | 프로그램 실행 및 설치 시 생성되는 임시 파일 이 디렉터리에 파일을 저장하면 재부팅 시 임의로 삭제될 수 있음 |
/lib | 기본 프로그램의 모듈 시스템 라이브러리 파일을 포함하는 디렉터리(유틸리티, 패키지 등 포함) |
/boot | 커널을 위한 프로그램 파일을 담고 있으며, 부팅할 때 읽혀 수행됨 |
/dev | 프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수 파일 |
/home | 각 사용자의 작업 디렉터리 각 계정으로 로그인할 때 이 디렉터리 밑에 자신의 작업 디렉터리가 시작 디렉터리가 됨 |
/dev | 디바이스 파일을 주로 포함하는 디렉터리 |
/sbin | Standalone binary 파일을 포함하는 디렉터리(시스템의 시작에 필요한 init, mount, sh 등) |
/var | 계정 정보와 계정 관리 및 시스템 통계 등에 관한 디렉터리 |
/usr | 각종 실행 프로그램이나 온라인 매뉴얼 등을 포함하는 디렉터리 다른 디렉터리에 있는 파일이 똑같이 위치하고 있는 것이 많은데, 이는 링크되어 있음 |
o 시스템 부팅 절차
① 시스템 초기화
② Bootstrap disk에 있는 첫 블록을 옮겨 그 코드(code)를 실행
③ Bootstrap loader는 유닉스 파일을 찾아서 메모리에 옮겨, 처리하여 수행
④ 유닉스 파일은 몇몇 하드웨어 인터페이스를 초기화
⑤ 초기화 작업이 끝난 후에 프로세스 0을 수행
⑥ 프로세스 0을 만들어 초기화한 후 시스템은 프로세스 0을 복제함으로써 프로세스 1을 생성
⑦ 앞 단계까지 성공적으로 수행한 경우, 정상적인 스케줄링 수행
⑧ init 프로세스인 프로세스 1이 수행이 되면 exec system call을 하게 되는데 이 시스템 콜은 프로세스 1의 code 명령에 파일 /etc/init를 읽어 들임.
⑨ getty 프로세스는 다음과 같이 처리됨. - Communication line connection, exec login
⑩ login 프로세스 - 사용자 ID/패스워드 검증, 쉘 실행
o 시스템 실행 단계(Run Level) - init 명령어를 통하여 사용자가 통제할 수 있다.
구분 | 설명 |
0 | PROM 감사 단계 |
1 | 관리상태의 단계(여러 개의 파일 시스템이 로드되고, 사용자 로그인의 접근이 불가능한 단일 사용자 단계) |
2 | 다중 사용자 단계(공유된 자원을 가지지 않음) |
3 | 다중 사용자 단계(공유된 자원을 가짐), 기본 실행단계 |
4 | 현재 사용되지 않음 |
5 | 실행을 중지시키는 단계(모든 시스템 프로세스들과 서비스들이 멈추고, 모든 파일 시스템들이 언마운트되는 단계) |
6 | 리부팅 단계(기본 수행단계인 단계 3으로 재부팅) |
S, s | 여러 개의 파일시스템이 로드되고, 원격 사용자 로그인 접근이 불가능한 단일 사용자 단계 |
서비스 포트의 취약성 권고안 | |||
Port 번호 | 서비스이름 | 취약성 | 비고 |
7 | echo | IP spoofing, DoS 공격 취약성 | 불필요 |
9 | discard | UDP를 통한 시스템 정보 유출 | 불필요 |
11 | systat | 시스템 정보 유출 | 불필요 |
13 | daytime | 시스템 정보 유출(fingerprint) | 불필요 |
15 | netstat | 시스템 정보 유출 | 불필요 |
19 | chargen | IP spoofing, DoS 공격 취약성 | 불필요 |
21 | ftp | Brute force 공격 취약성 | 사용 확인 (제거 또는 패치 적용 권고) |
22 | ssh | Buffer overflow | 사용 확인 (패치 적용) |
23 | telnet | Brute force 공격 취약성 | 사용 확인 (제거 또는 패치 적용 권고) |
37 | time | DoS 취약성 | 불필요 |
69 | tftp | 패스워드 없는 인증 | 불필요 |
79 | finger | 사용자 계정 정보 유출 | 불필요 |
110 | pop3 | Buffer overflow, Brute-force 공격 취약성 | 사용 확인 (제거 권고) |
111 | rpc | Buffer overflow 공격 취약성 | rpc.cmd(사용함) |
113 | identd | DoS 공격 취약성 | 사용 확인 (제거 권고) |
117 | uucp | Brute force 공격 취약성 | 불필요 |
119 | nntp | 인증 없이 메시지 읽기 | 불필요 |
123 | ntp | Buffer overflow, DoS 공격 취약성 | 사용 확인 |
161 | snmp | 시스템 정보 유출 | 사용 확인 |
512 | rexec | Buffer overflow 공격 취약성 | 사용 확인 (제거 권고) |
513 | rlogin | 원격 로그인 | 사용 확인 (제거 권고) |
514 | rsh | IP spoofing 공격 취약성 | 사용 확인 (제거 권고) |
515 | lp | Buffer overflow 공격 취약성 | 사용 확인 (제거 권고) |
517 | talk | DoS 공격 취약성 | 불필요 |
520 | rip | 네트워크 정보 유출 | 사용 확인 (제거 권고) |
그냥 필요없으면 막자.
필요한 것도 다시 보자..
(1) 시스템 시작과 종료
o 리눅스 시스템은 도스나 윈도우 운영체제와 달리 시스템을 종료될 때까지 커널 메모리상에 프로세스들이 작동하고 있으므로 시스템을 종료하기 위해서 파워를 끄는 등의 행위로 인하여 리눅스 시스템의 파일시스템에 결함을 발생시킬 수 있다.
- shutdown
. shutdown -r now : 지금 바로(now 옵션) 시스템 리부팅(-r 옵션)
. shutdown -h now : 지금 바로 종료
- halt : 강제종료 명령어로 주로 shutdown을 사용하는 것이 안전하며 시스템의 조정을 할 수 없을 경우에 주로 사용된다.
- reboot : 시스템 재부팅 명령어로 shutdown과 유사하지만 shutdown는 프로세스를 종료할 때 kill -15를 사용하여 파일 시스템의 무결성을 보장할 수 있고 reboot는 현재 실행중인 프로세스를 즉시 종료하는 kill -9를 사용하므로 안전한 종료를 보장할 수 없다.
(2) 사용자 계정 관리
o 리눅스는 멀티태스킹의 특징을 가지고 있으므로 다중 사용자를 수용하여 작업을 수행할 수 있다. 이때 사용자마다 계정을 생성하면 /etc/passwd 파일에 계정 및 패스워드 사용자 및 그룹 ID, 그리고 쉘이 정의된다.
- /etc/passwd는 일반 사용자들도 접근하여 파일 내용을 볼 수 있기 때문에 안전한 관리를 위해서 새도우 패스워드 시스템을 사용하여 /etc/shadow에 암호문으로 저장된다.
- /etc/shadow 파일은 계정명, 암호화된 패스워드 등 9개의 필드로 되어있으며 일반사용자에게는 접근 권한이 없으므로 더욱더 안전하다.
- chage 유틸리티를 이용하여 계정 패스워드 관리
o 계정 사용 제한
- 원격 접근권한 제거 : /etc/passwd 파일에서 /bin/bash과 같은 쉘을 삭제
- 계정 사용기간 설정 : /etc/shadow 파일에서 사용기간 또는 만료일 설정
o 시스템 계정 보안
계정 관련 파일 | |
구분 | 설명(파일구성) |
/etc/passwd | 시스템에 로그인과 계정에 관련된 권한 관리를 위한 파일 Login-ID:x:UID:GID:comment:home-directory:login-shell |
/etc/shadow | /etc/passwd 파일의 암호 영역을 담당하는 파일로, 슈퍼유저(root)만이 접근할 수 있는 파일 Login-ID:password:lastchg:min:max:warn:inactive:expire |
/etc/group | 로그인 사용자의 그룹 권한 관리를 위한 파일 group-name:password:GID:user-list |
o 파일 보안
① umask를 이용한 파일권한 설정 - umask 값이 안전하지 않은 권한으로 설정된 경우, 허가되지 않은 사용자에게까지 파일이나 프로세스에 접근이 허락되어 보안 상 큰 위협 요소가 될 수 있다. 시스템의 기본 값으로 umask는 시스템 환경파일인 /etc/profile 파일에 022로 설정되어 있다. 보안을 강화하기 위하여 시스템 환경파일(/etc/profile)과 각 사용자별 홈 디렉터리 내 환경파일($HOME/.profile)에 umask값을 027 또는 077 로 변경하는 것을 권장한다.
umask 값에 따른 파일 권한 | ||||
umask | 소유자 | 그룹 | 다른 사용자 | 권고 사항 |
000 | All(모든 권한) | All(모든 권한) | All(모든 권한) | |
002 | All(모든 권한) | All(모든 권한) | Read, Execution | |
007 | All(모든 권한) | All(모든 권한) | None | |
022 | All(모든 권한) | Read, Execution | Read, Execution | 시스템 기본 설정 |
027 | All(모든 권한) | Read, Execution | None | 보안권고 |
077 | All(모든 권한) | None | None | 보안권고(고수준) |
② 특수 권한(setuid, setgid)파일의 관리 - SUID(Set UID), SGID(Set GID)은 실행 파일이 슈퍼유저(root)나 다른 상위 사용자의 권한으로 수행될 수 있도록 규정한 특별한 파일권한 설정 비트이다. 또한 상위 권한으로 실행되는 특징 때문에 시스템 해킹의 주요 수단으로 악용되며, 프로그램 파일에 버그가 존재할 경우 불법 권한 획득에 이용될 수 있는 심각한 보안 위협이 될 수 있다. 즉, 일반 사용자가 SUID, SGID 설정을 통해 특정 슈퍼 유저의 권한을 위임받아 특정 명령을 실행시킬 수 있다.
o setuid: 실행 파일에 사용됨(예: /etc/passwd)o setgid: 같은 project에 실행 권한을 주기 위해서 setgid 사용 (예: sys)
o sticky bit: 디렉터리에 인가된 사용자만 쓰기(write) 가능하도록 하기 위해서 디렉터리 자체에 설정 (예: /var/tmp - 모든 사용자가 사용 가능하지만, 삭제는 파일의 소유자만 가능함(root는 예외)) - 파일 666 / 디렉토리 777
※ find / -perm 7000 -print : suid, sgid, sticky 비트가 모두 설정된 파일을 검사
※ find / -perm 6000 -print : suid, sgid가 설정된 파일을 검사
o TCP Wrapper
- 인터넷 슈퍼데몬인 inetd 데몬에 의해 구동되는 네트워크 서비스(예를 들어 ftp, telnet, rlogin, rsh, exec, tftp, talk, systat, finger 등)들에 대한 접근 통제와 사용된 서비스별 로그를 기록할 수 있는 보안강화 도구
구분 | 설명 |
접근 제어 | TCP Wrapper의 접근제어는 /etc/hosts.allow 파일과 /etc/hosts.deny 파일에 의하여 이루어진다. 접근 제어에 사용되는 두 파일 중에서 tcpd가 먼저 검색하는 것은 hosts.allow 파일이다. 그러므로 hosts.allow 파일에 접근을 허가하는 호스트를 적어두고, hosts.deny 파일에는 ALL을 적어두면 허가된 호스트만이 시스템에 원격으로 접근할 수 있다. |
로그 기록 | TCP Wrapper(tcpd)는 syslog 데몬을 사용하며 telnet, ftp, rexec, rsh, rlogin, tftp, talk 등에 대한 접근 로그를 기록하며 기본적으로 /var/log/syslog 파일에 저장된다. 다른 파일로 변경하려면 /etc/syslog.conf 파일에서 설정을 수정하면 된다. |
- 네트워크 서비스에 관련한 트래픽을 제어하고 모니터링 할 수 있는 UNIX 기반의 방화벽 툴로써 임의의 호스트가 서비스를 요청해 오면 실제 데몬을 구동하기 전에 접속을 허용한 시스템인지 여부를 확인하여 호스트명 및 서비스명을 로그에 남긴다음, 허가된 시스템은 서비스를 제공하고 허가되지 않은 경우에는 접속을 차단해 주는 도구로
- /etc/inetd.conf에 정의되고 inetd 데몬에 의해 통제되는 네트워크 서비스를 통제하기 위하여inetd 데몬과 네트워크 서비스데몬(in.telnetd, in.ftpd, in.rlogind 등) 사이에 tcpd 데몬을 구동하여 네트워크 서비스의 사용에 대한 접근 제어와 로그 기록 기능
- 특정 서비스를 TCP-Wrapper로 접근제어를 하려면 외부의 연결로부터 보호할 네트워크 서비스들을 선택하여 tcpd가 보호하도록 inetd.conf 파일을 수정해 주어야하는데 이를 위한 서비스별 설정 방법 이해
. /etc/hosts.deny, /etc/hosts.allow 파일 설정 이해
파일명 | 설명 |
/etc/hosts.deny | TCP Wrapper가 설치되어 있는 경우, 특정 host의 접속 거부 내용을 정의한다. |
/etc/hosts.allow | TCP Wrapper가 설치되어 있는 경우, 특정 host의 접속 허용 내용을 정의한다. |
/etc/hosts.equiv | 특정 호스트의 모든 사용자를 신뢰하게 만들어 로컬 호스트로 접근이 허용된 원격호스트를 설정한다. |
$HOME/.rhosts | 외부에서 사용자의 인증(Authentication) 절차 없이 접속할 수 있는 사용자를 정의한다. |
o IPchain/IPtable
. IPtable은 패킷필터링 방화벽으로 패킷 필터란 네트워크를 통하는 모든 것은 패킷의 형태를 가지며, 패킷의 앞부분에 는 패킷이 어디서 왔는지 어디로 향하는지, 어떤 프로토콜을 이용하는지 등과 같은 정보를 가지고 있다. 패킷 필터는 이렇게 지나가는 패킷의 헤더를 보고 패킷을 ‘DROP' 하거나 ’ACCEPT‘ 하는 등의 작업을 하는 프로그램을 말한다. iptable은 이런 패킷 필터링 기능을 설정하는데 사용할 수 있는 프로그램이며 다음과 같이 패킷 검사를 수행한다.
1. 패킷이 커널에 도착하면 그 패킷의 목적지를 확인한다. 이것을 '라우팅' 이라고 한다.
2. 패킷의 목적지가 이곳이면, 패킷은 전달돼 입력체인에 도달한다. 패킷이 입력체인을 통과하면 패킷을 기다리고 있던 프로세서가 받게된다.
3. 그렇지 않고 커널이 포워딩 불능이나, 패킷을 어떻게 포워딩해야 하는가를 알지 못하면, 그 패킷은 ‘DROP‘ 된다. 포워딩이 가능하게 돼있고 다른 곳이 목적지이면 패킷은 포워딩 체인으로 간다. 이 체인이 ACCEPT‘ 하게 되면 이것은 포워딩할 네트워크로 보내진다.
4. 마지막으로, 로컬에서 수행하던 프로그램은 네트워크 패킷을 전송할 수 있다. 이 패킷은 즉시 출력 체인에 보내지며 이 체인이 ‘ACCEPT’되면 이 패킷은 그 목적지가 어디든지 보내진다.
.특정 서비스에 대한 IPtable 정책설정 방법 이해
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
o CGI Wrapper
- TCP_Wrapper가 유닉스 서버의 네트워크 서비스(예: Telnet, rlogin, ftp 등)에 대한 접근 통제를 위한 보안도구라면 CGI Wrapper는 웹서비스의 CGI를 보호하는 웹서버 보안강화 도구이다.
- CGI Wrapper는 웹서버의 자식 프로세스들이 모두 nobody 권한으로 실행되었을 때 발생하는 문제점을 보완하기 위하여 만들어진 것이다. CGI Wrapper는 CGI 프로그램이 위치한 디렉터리의 소유자 권한으로 CGI 프로그램을 실행시킨다.
- 따라서 모든 CGI가 nobody로 실행되는 것이 아니며, 모든 CGI는 CGI 프로그램 자신의 소유로 실행이 되는 것이다. 그리고 CGI Wrapper는 실행시킬 CGI 프로그램이 위치한 디렉터리 소유자와 CGI 프로그램의 소유자를 비교하여 같을 때에만 실행시키며, 다를 때에는 실행시키지 않도록 동작함으로써 CGI에서 발생되는 취약성을 보완한다.
'정보보호관리체계(ISMS-P) > 실무 Q&A' 카테고리의 다른 글
ISMS-P 인증심사원 - 윈도우 보안 (0) | 2022.06.10 |
---|---|
ISMS-P 인증심사원 - 유닉스/리눅스 보안(2) (0) | 2022.06.10 |
ISMS-P 인증심사원 - 공개키기반구조(PKI) (0) | 2022.06.10 |
ISMS-P 인증심사원 - 전자서명 (0) | 2022.06.10 |
ISMS-P 인증심사원 - 해쉬함수 (0) | 2022.06.10 |