본문 바로가기

정보보안/시스템 보안

[UNIX/Linux 기본학습] 서버보안2

네트워크 보안
SSH(Secure Shell)
보안쉘
① 개념 : 암호통신을 이용해 원격으로 명령을 실행하거나 파일을 조작하는 응용 프로그램 또는 프로토콜을 의미
- 암호화된 원격 터미널 서비스 제공: TELNET 대체
- 암호화된 파일 송수신 서비스 제공: FTP 대체

② 특징
- 기존의 r계열 송수신 서비스(rsh, rlogin), Telnet, FTP 등의 평문 송수신 서비스의 취약점을 대체하기 위해 설계
- 디폴트로 22/tcp 포트 사용

 

슈퍼 데몬(inetd 데몬)
① 개념
- 데몬:
클라이언트의 접속 요청이 있을때까지 대기하다가 요청이 들어오면 해당 요청을 처리할 서비스 프로세스를 실행하는 것
- Stand-Alone 방식:
개별 서비스별로 데몬이 동작하는 방식. 속도가 빠르지만 서버자원을 많이 점유한다.
- 슈퍼 데몬(inetd) 방식:
효율적인 서버 자원의 활용을 위해 등록한 서비스에 대하여 한 데몬이 클라이언트 요청을 모두 처리 후, 개별 서비스 프로세스를 호출하는 방식. 속도는 느리지만 서버자원을 절약한다.

② 특징
- inetd 데몬은 N개의 개별 서버를 하나로 통합하여 클라이언트로부터 서비스 요청이 들어올 때마다 해당 서비스에 관련된 실행 모듈(FTP,Telnet 등)을 실행한다.
- TCP Wrapper 서비스(tcpd 서비스)와 연동하여 서비스별 호스트 접근 제어를 수행할 수 있다.
- 리눅스 시스템의 경우 xinetd 데몬을 주로 사용한다. xinetd란 inetd에서 보안과 자원 관리 등을 향상시킨 것이며 기능적 큰 차이는 없다.

③ 참조파일
- '/etc/inetd.conf' 파일을 참조하여 서비스할 프로그램들에 대한 정보를 얻는다. 즉, 시스템 관리자는 이 파일에 서비스할 프로그램의 특징 정의가 필요하다.

+'/etc/protocols' 파일 : 인터넷상에서 사용하는 프로토콜과 프로토콜 식별 번호를 정의해놓은 파일
+'/etc/services' 파일: 인터넷 상에서 사용하는 다양한 서비스에 대한 포트/프로토콜 정보를 정의해놓은 파일

[파일 구조]
cat /etc/inetd.conf

#서비스명 소켓타입 프로토콜 플래그 사용헐사용자계정 실행경로 실행인수
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -l -a
telnet stream tcp nowait root /user/sbin/in.telnetd in.telnetd​

서비스명 inetd데몬은 /etc/services 파일에 등록된 포트 번호를 참조하여 서비스할 프로세스의 포트를 결정한다.
/etc/inetd.conf와 /etc/services 파일은 서비스명을 인덱스로 하여 해당 서비스의 정보를 서로 연계한다.
소켓타입 해당 서비스에 대한 소켓 유형을 설정한다.
tcp기반 : stream
udp기반: datagram
프로토콜 /etc/protocols 파일에 주어진 프로토콜 중 사용 가능한 프로토콜을 설정한다.
/etc/services 파일에 설정한 프토토콜과 일치해야한다.
플래그 nowait: 서비스 요청을 받은 이후에 즉시 다음 서비스 요청을 처리
wait: 요청 처리가 완료될 떄 까지 대기 후 다음 요청 처리
사용할 사용자 계정 프로그램을 실행시킬 사용자 설정
실행 경로명 해당 서비스를 처리하는 실행 모듈의 경로를 절대 경로로 설정
실행 인수 프로그램 인수 설정
첫 번재는 으용 프로그램 자신의 이름이 된다.

④ 서비스 활성화 명령어
- systemctl restart inetd

⑤ 보안 권고사항
- 불필요한/취약한 서비스는 비활성화 해야한다.
- inetd.conf파일에 해당 서비스에 대하여 주석 처리(#)를 하면 된다.
[불필요하고 보안상 취약한 서비스]
- DoS 공격에 취약한 Simple TCP 서비스 : echo(7/tcp), discard(9/tcp), daytime(13/tcp), chargen(19/tcp) 등
- r 계열 서비스 : rlogin,rsh,rexec 등. r계열 서비스는 인증 없이 관리자의 원격 접속을 가능하게 한다. 
- 불필요햔 rpc(remote procedure call) 서비스 : rpc.cmsd, rusersd 등 분산환경에서 서버 응용 프로그램에 접근하여 작업 호출(call)을 할 수 잇는 서비스로 버퍼 오버플로우 등 다수의 취약점이 존재하여 침해사고 발생 위험이 있다.
- 기타 불필요한 서비스: finger, tftp, talk 등

 

접근 통제(TCP Wrapper)

① 개념 : hosts 을 참조하여 접근을 허용한 호스트(IP)에 대해서만 서비스를 허용(접근 통제를 위해 있는 것)
- hosts.allow 파일 참조 후, 해당 호스트가 있다면 접근을 허용.
- 없다면 hosts.deny파일을 참조해 해당 호스트의 정보가 있으면 접근을 차단.
- hosts.deny 파일에도 해당 호스트 정보가 없다면 default로 모든 접근을 허용.

② 특징
- TCP Wrapper 을 사용하면, /etc/inetd.conf 파일에 실행경로 부분이 'usr/sbin/tcpd'로 변경된다.
- tcpd는 hosts.allow,hosts.deny 파일을 참조해 접근제어를 수행 한 후, 실행 인수로 설정된 서비스를 실행한다.

③ 참조파일
- hosts.allow(접근 허용)
- hosts.deny(접근 금지)


[구문 형식]
문법 service_list : client_list [: shell_command]
옵션 service_list 한 개 이상의 네트워크 서비스명 또는 예약어. 구분자 ',' 로 구분
client_list 한 개 이상의 호스트명, 도메인명 IP 주소, 네트워크ID, 또는 예약어로 구분자 ',' 로 구분
shell_command 일치하는 것이 있을 때, 선택적으로 tcpd가 실행하는 쉘 명령어
- twist: 명령의 결과를 클라이언트에게 전송
- spawn: 명령의 결과를 클라이언트에게 전송 x. 
+ 예약어
- ALL : 모든
- LOCAL : 같은 네트워크에 있는 모든 호스트
- B EXCEPT A : 리스트 B 에서 A를 제외한 모든 B

 

xinetd 슈퍼데몬
① 개념: 다양한 서비스별 접근제어 기능을 제공하며, inetd의 보안 문제, 자원관리 문제를 해결한 슈퍼 데몬

② 특징
- TCP Wrapper 기능 뿐만 아니라, 서비스별로 접근제어를 정의한다.

③ 설정파일
- /etc/xinetd.conf : 모든 서비스에 적용되는 xinetd 설정파일
- /etc/xinetd.d/서비스별 설정파일 : 개별 서비스에 적용되는 xinetd 설정파일
[파일형식]
service telnet # 서비스 이름 설정
{
 # 일반 설정
 disable		= no # 서비스 실행 여부 (yes: 실행안함, no: 실행함)
 socket_type	= stream # 서비스 소켓 유형 (stream: tcp, dgram: udp)
 wait			= no # 서비스 요청 처리 중 다음 요청 발생 시 대기 여부 (yes: 완료까지 요청 대기(udp), no: 즉시 처리(tcp)  
 user			= root # 서비스를 실행할 사용자
 server			= /usr/sbin/in.telnetd #서비스 실행파일 경로
 
 # 접근 제어 관련 설정(구분자는 공백, 주소대역은 CIDR 표기 사용)
 only_from		= 192.168.56.0/24 192.168.57.0/24 # 접근을 허용할 특정 IP 주소/주소대역
 no_access		= 192.168.56.110 # 접근을 차단할 특정 IP 주소/주소대역
 access_times	= 09:00-12:00 13:00-18:00 # 접근을 허용할 시간(24시간 기준) 범위 설정
 cps			= 50 10 # 초당 최대 연결 개수 설정 (첫번째 인수: 초당 최대 연결개수, 두번째 인수: 초과시 연결 제한 초)
 instances		= 100 # 동시에 서비스할 수 있는 최대의 서버(서비스 프로세스)개수. 예시는 최대 100개를 동시에 서비스 한다.
 per_sources	= 10 # 출발지 IP별 최대 연결개수. 출발지 IP 별로 최대 10개의 서비스만 연결한다.
 
 # 설정 파일 형식(로그 관련 설정)
 log_type		= SYSLOG daemon info # syslog 이용. damon서비스(facility)의 info 로그수준(priority)로 로그 남김
 log_on_failure	= HOST # 서버접속 실패 시 로그 파일에 기록할 내용 정의
 log_on_success = PID HOST DURATION EXIT # 서버접속 성공 시 로그 파일에 기록할 내용 정의
 # 주요 설정값
 # PID : 서비스 프로세스 ID
 # HOST : 원격 호스트 IP 주소
 # DURATION : 서비스가 시작해서 종료할 때까지(세션)의 지속시간
 # EXIT : 서비스 종료 상태 코드
}