반응형
정보보안기사 필기 4-6. 유닉스/리눅스 서버 보안(Stand-alone/슈퍼데몬, TCP Wrapper)
1. 네트워크 보안
1) 보안 쉘(SSH)
1-1) 보안 쉘(Secure Shell)이란 암호 통신을 이용하여 네트워크상의 다른 컴퓨터에 접속하여 원격으로 명령을 실행하거나 파일을 조작하는 응용 프로그램 또는 프로토콜을 의미한다.
- 암호화된 원격 터미널 서비스 제공
- 암호화된 파일 송수신 서비스 제공
1-2) 기존의 rsh, rlogin, Telnet, FTP 등 평문 송수신 서비스의 취약점을 대처하기 위해 설계되었으며 디폴트로 22/tcp 포트를 사용한다.
- 평문 송수신을 하게되면 도청(Sniffing), ID/PW가 보내지게 된다면 재전송 공격(Replay Attack) 공격에 취약하게 된다. 소켓 네트워크 통신을 하기위한 소프트웨어 모듈 커널이 소켓 라이브러리를 지원
2) 서버 프로세스(데몬)
2-1) 서비스 프로세스 만드는 과정
- ① 각 서버 프로세스(데몬)에서는 네트워크 통신을 하기위한 소프트웨어 모듈인 Socket 생성, 소켓 라이브러리는 커널이 지원을 해준다.
- ② 생성한 Socket에 로컬 주소정보(IP/Port)를 bind 작업 진행
- ③ 생성한 Socket을 Listen Socket으로 만들어 클라이언트 1의 연결요청을 받아줄 수 있는 Socket으로 만들어 준다. Socket은 크게 두 가지 종류로 구분할 수 있다.(Listen, Connect).
- ④ 이렇게 만들어진 Socket은 클라이언트 1의 연결요청이 올 때까지 대기하고 있다가 연결요청이 오면 처리를 진행한다.
- ⑤ 클라이언트 1과 3-Way Handshake로 연결이 성립이되면 서버 프로세스(데몬)는 새로운 연결 Socket을 생성을 하고 fork()를 통해서 서비스 프로세스를 만든 다음에 생성한 연결 Socket을 서비스 프로세스에게 넘겨준다.
- 실제로는 fork()를 통해 서비스 프로세스를 만들게 되면 너무 느리기 때문에 서버 프로세스(데몬)은 미리 서비스 프로세스를 만들어 놓는다.
- ⑥ 이렇게 되면 실제로 클라이언트와 통신을 하며 서비스를 제공해주는 것은 서비스 프로세스가 되는 것이다.
- ⑦ 클라이언트 2도 연결요청을 하게되면 ① ~ ⑤까지의 과정을 처리해주어 fork()를 통해서 서비스 프로세스를 만든 다음에 연결 Socket을 서비스 프로세스에 넘겨주어 클라이언트 2에게 서비스를 제공해주게 되는 것이다.
2-2) 다양한 서버 프로세스(데몬)를 동작시키는 방식 - Stand-alone 방식
- 개별 서비스 별로 서버 프로세스(데몬)를 독립적으로 띄워서 동작시키는 방식으로 속도가 빠른 장점이 있지만 서버 리소스도 많이 점유하고 있는 단점이 있다.
- 상대적으로 클라이언트 요청이 덜 한 FTP, Telnet 서버 프로세스(데몬)의 경우 안띄어 놓을 수도 없기 때문에 대부분의 시간을 "대기"상태로 보낸다.
- 각 서비스 프로세스들의 하는 역할은 다 다르지만 FTP, HTTP, Telnet 등 다양한 서버 프로세스(데몬)들이 하는 역할은 연결요청을 수락한 다음 서비스 프로세스를 생성해주는 것으로 동일하다.
- 여기서 "어차피 서버 프로세스(데몬)들이 하는 역할은 동일한데 하나의 서버 프로세스(데몬)에서 수행하게 해주면 좋지 않을까?" 라는 생각에서 나온것이 슈퍼데몬(inetd) 방식이다.
2-3) 다양한 서버 프로세스(데몬 프로세스)를 동작시키는 방식 - inetd 방식
- 효율적인 서버자원의 활용이라는 측면에서 공통적인 부분을 처리하는 '슈퍼데몬(데몬의 데몬 프로세스를 의미)을 만들어 개별 서비스를 등록하게 하여 클라이언트 요청은 슈퍼 데몬이 처리하여 개별 서비스 프로세스를 호출해주는 방식이다.
- inetd 데몬은 최초 실행 시 설정파일(/etc/inetd.conf)의 정보를 참조하여 서비스할 프로그램들에 대한 정보를 얻는다. 클라이언트 연결요청이 들어오면 설정파일(/etc/inetd.conf)의 목록을 확인 한 후 해당 서비스 포트를 열어주게 되는 것이다.
- 여러 Listen Socket으로 클라이언트 요청이 오는지 감시하며 클라이언트 요청이 들어오면 해당 서비스 프로세스를 생성해주는 방식인데, 이러한 여러 Listen Socket에서 클라이언트 요청이 들어오는지 감시하는 부분에 있어 커널의 도움이 필요하게되며 Multiplex I/O 방식이라고 한다.
- TCP Wrapper 서비스(tcpd 서비스)와 연동하여 서비스별 호스트 접근 제어를 수행할 수 있다.
- 서버 리소스를 절약할 수 있는 장점이 있지만, HTTP 요청과 같이 다수의 클라이언트의 요청에 대해 처리하지 못하며 서비스 처리속도가 느린 단점이 있다.
.
2-4) /etc/inetd.conf 파일의 구조
ftp | stream | tcp | nowait | root | /usr/sbin/in.ftpd | in.ftpd -l -a |
- 서비스명 : inetd 데몬은 /etc/services 파일에 등록된 포트번호를 참조하여 서비스할 프로세스의 포트를 결정한다. /etc/inetd.conf와 /etc/services 파일은 서비스명을 인덱스로 하여 해당 서비스의 정보를 서로 연계한다.
- 소켓타입 : 해당 서비스에 대한 소켓유형을 설정한다. TCP 기반 서비스는 stream(전화)을 사용하고, UDP 기반의 서비스는 datagram(편지/택배)을 사용한다.
- 프로토콜 : /etc/protocols 파일에 주어진 프로토콜 중 사용가능한 프로토콜을 설정한다. 또한 /etc/services 파일에 설정한 프로토콜과 일치해야 한다.
- 플래그 : 서비스 요청을 받은 이후에 즉시 다음 서비스 요청을 처리할 것인지(TCP, nowait) 아니면 요청처리가 완료될 때까지 대기하였다가 다음 요청을 처리할지(UDP, wait) 설정한다.
- 사용할 사용자 계정 : 프로그램을 실행시킬 사용자를 설정한다.
- 실행 경로명 : 해당 서비스를 처리하는 실행 모듈의 경로를 절대경로로 설정한다.
- 실행 인수 : 프로그램의 인수를 설정한다. 첫 번째는 응용 프로그램 자신의 이름이 된다.
- inetd.conf 파일에 실행할 서비스를 활성화(# 주석 제거) 한 후 inetd 데몬을 재시작 한다.
※ 서버 프로세스(데몬) 재시작 하는 이유?
서버 프로세스(데몬)들의 다양한 설정파일들은 최초로 서비스가 기동할 때 파일을 읽은 후 메모리에 상주시켜 참조하게 된다. 설정파일의 변화가 있을 때마다 파일 I/O를 발생시켜 서버 프로세스(데몬)이 읽는다면 속도가 매우느리기 때문이다. 설정파일의 내용을 변경한다고 해도 서버 프로세스의 동적인 부분에 반영되지 않고 일반적으로 해당 서버 프로세스(데몬)은 재시작해줘야 반영이 된다.
2-5) 불필요한/취약한 서비스 비활성화
- DoS 공격에 취약한 Simple TCP 서비스 : echo(7/tcp), discard(9/tcp), daytime(13/tcp), chargen(19/tcp) 등
- r 계열 서비스 : rlogin, rsh, rexec 등, r 계열 서비스는 인증 없이 관리자의 원격접속을 가능하게 하는 명령어들로 이기종 운영체제간 백업 등의 용도로 사용되는 경우가 있으나 보안상 매우 취약하기 때문에 사용하지 말아야 한다.
- 불필요한 RCP(Remote Procedure Call) 서비스 : rpc, cmsd, rusersd 등 분산 환경에서 서버 응용프로그램에 접근하여 작업 호출(Call)을 할 수 있는 서비스로 버퍼 오버플로우 등 다수의 취약점이 존재하여 침해사고발생 위험이 있으므로 서비스를 중지해야한다.
- /etc/inetd.conf 파일에서 취약한 서비스를 grep하여 활성화되어 있으면 이를 주석처리하여 비활성화 한다.
- EX) cat /etc/inetd.conf | egrep "echo|discard|daytime"
2. 접근통제(TCP Wrapper)
1) 개요
- 외부에서 들어오는 클라이언트에 대해 접근통제 기능을 제공한다. 클라이언트의 IP 주소를 확인하여 시스템 관리자가 접근을 허용한 호스트들에 대해서만 서비스를 허용하기 때문에 외부의 해킹으로부터 시스템을 보호할 수 있다.
- 접근허용 및 차단에 대한 판단은 /etc/hosts.allow와 /etc/hosts.deny 파일에 정의된 호스트 정보(IP 정보)를 기준으로 한다.(hosts.allow → hosts.deny → default 동작(허용))
- TCP Wrapper를 사용하기 전과 후의 Telnet 서비스에 대한 /etc/inetd.conf 파일 구조
구분 | 서비스 | 소켓 타입 | 프로토콜 | 플래그 | 사용자 | 실행경로 | 실행인수 |
사용전 | Telnet | stream | TCP | nowait | root | /usr/sbin/in.telnetd | in.telnetd |
사용전 | Telnet | stream | TCP | nowait | root | /usr/sbin/tcpd | in.telnetd |
- TCP Wrapper를 사용할 경우 해당 서비스의 실행경로에 "usr/sbin/tcpd"를 명시한다. inetd 데몬은 외부로부터 서비스 요청이 올 경우 inetd.conf 파일을 참조하여 실행경로에 설정된 /usr/sbin/tcpd(TCP Wrapper 프로세스)를 실행한다. 반드시 재시작을 해야 적용이 된다.
- tcpd는 hosts.allow 및 hosts.deny 파일을 참조하여 접근제어를 수행한 후 실행인수로 설정된 서비스를 실행한다.
1-1) host.allow와 hosts.deny
- 보통 운영할 때 화이트리스트 방식으로 운영을 진행한다. hosts.allow 파일에 허용할 호스트를 명시한 후 hosts.deny 파일에 그 외의 모든 호스트를 차단하도록 설정한다. 결과적으로 먼저 처리되는 hosts.allow 파일에 허용하지 않는 호스트들은 모두 차단하게 된다.
- ALL은 모든 서비스 또는 모든 호스트를 의미, LOCAL은 같은 네트워크에 있는 모든 호스트를 의미, B EXCEPT A는 리스트 B에서 A를 제외한 모든 B를 의미한다.
hosts.deny | hosts.allow | 설명 |
ALL : ALL | ALL : 1.1.1.1 | IP 1.1.1.1에 대해 모든 서비스가 허용된다. |
ALL : ALL | in.telnetd : 1.1.1.1 in.ftpd : 1.1.1.1, 1.1.1.2 |
IP 1.1.1.1에 대해 telnet과 ftp 서비스가 가능하고 IP 1.1.1.2에 대해서는 ftp 서비스만 가능하며, 그 외 호스트들에 대해서는 어떤 서비스도 불가능 하다. |
ALL : ALL | ALL EXCEPT in.telnetd : ALL | 모든 호스트에 대해 telnet 서비스를 제외한 모든 서비스가 가능하다. |
ALL : ALL | in.telnetd : 1.1.1. | IP 1.1.1로 시작하는 IP 주소로 갖는 모든 호스트는 telnet 서비스가 가능하다. |
ALL : ALL | in.telnetd : .kkmin.com | kkmin.com 도메인에 속한 모든 호스트는 telnet 서비스가 가능하다. |
ALL : ALL | in.telnetd : .kkmin.com EXCEPT www.kkmin.com | www.kkmin.com 을 제외한 kkmin.com 도메인의 모든 호스트에 대해 telnet 서비스가 가능하다 |
반응형
'정보보안기사 필기 > 1. 정보보안 일반' 카테고리의 다른 글
정보보안기사 필기 4-7. 유닉스/리눅스 서버 보안(PAM:장착형 인증 모듈) (0) | 2022.04.19 |
---|---|
정보보안기사 필기 4-5. 유닉스/리눅스 서버 보안(패스워드 관리, 프로세스 실행권한) (0) | 2022.04.19 |
정보보안기사 필기 4-4. 유닉스/리눅스 서버 보안(프로세스) (0) | 2022.04.19 |
정보보안기사 필기 4-3. 유닉스/리눅스 서버 보안(파일시스템, 하드/심볼릭 링크) (0) | 2022.04.19 |
정보보안기사 필기 4-2. 윈도우 서버 보안 (0) | 2022.04.19 |