안녕하세요
뚱보 프로그래머 입니다.
보안에는 여러가지 방안이 존재합니다.
사이트 보안의 방법
1) 호스트 보안
시스템이 안전하도록 철저한 관리를 하는 것과 네트워크의 다른 사람들도 같은 정도로 보안에 만전을 기하도록 바라는 것에서부터 시작해야 할 것이다. 좋은 패스워드를 고르는 것, 여러분 호스트의 지역 네트워크 서비스에 대한 보안화 작업을 하는 것, 계정 사용일지를 잘 관리하는 것, 보안 구멍이 있다고 알려진 프로그램을 갱신 교체하는 것등이 지역 보안 관리자 임무의 일부이다.
2) 네트워크 보안
한 네트워크에 수 백 내지 수천의 컴퓨터가 붙어있는 상황에서 하나 하나의 모든 시스템이 전부 보안화 작업이 되어 있다고 믿어서는 않된다. 정식 사용자만이 네트워크를 쓰도록 만들고 방화벽을 만들고 강력한 암호 기법을 쓰고 네트워크 상에 관리자도 없고 주인도 없는 시스템 등 안전 관리가 안되어 있는 시스템이 없도록 하는 것등이 모두 네트워크 관리자의 임무인 것이다.
3) 은둔 보안 방식
구석에 숨는 식의 보안은 반드시 논의되어야 하는 보안법의 하나이다. 예를 들어 보안 침탈법이 있다고 알려진 서비스의 포트를 비정규적이 포트로 이동해 놓으면 공격자가 당연히 이를 모를 것이므로 당연히 침탈해 들어오지 못할 것이라는 따위의 생각이다.
시스템 보안
1) 컴퓨터 열쇠
2) 바이오스 보안
바이오스는 x86 CPU 기반의 하드웨어들을 제어하는 가장 밑바탕인 소프트웨어이다. 릴로나 그 밖의 리눅스 부트 프로그램들은 바이오스를 액세스해서 리눅스 부팅 방법을 결정한다. 리눅스가 돌아가는 다른 하드웨어에도 바이오스와 비슷한 소프트웨어들이 있다. 맥과 신형 선 컴퓨터의 OpenFirmware, sun boot prom 등이다. 이러한 바이오스 기능들은 침입자가 컴퓨터를 리부팅하는 방법을 씀으로써 시스템을 조작하려는 것을 막을 수 있다.
대부분 PC 바이오스에 부트 패스워드를 설정할 수 있고 플로피나 CD ROM으로 부팅을 하지 못하게 하거나 특정 바이오스 기능에 접근하기 위해 패스워드를 설정할 수도 있다.
3) 부트 로더 보안
여러가지 리눅스 부트 로더로도 패스워드 보안을 설정할 수 있다.
릴로를 예로 들면, password와 restricted(부트 제한 기능이 있는) 등의 키워드가 있다. password 키워드를 쓰면 부팅 때 항상 패스워드를 물어보도록 설정할 수 있고, restricted 키워드를 쓰면 릴로 프롬프트에서 single 등의 특별한 옵션을 사용한 경우에 대비해서 부팅 패스워드를 조건적으로 물어보도록 구성하게 된다. 일단 패스워드를 설정하고 나면 패스워드를 모두 기억해야 한다.
다음과 같이 lilo 설정 파일 (/etc/lilo.conf)을 수정하여 부팅시 암호를 걸수 있다.
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
time-out=00 # time-out을 0로 설정
message=/boot/message
prompt
default=linux
restricted # 이 라인을 추가
password=<password> # 이 라인을 추가하고 암호를 설정
image=/boot/vmlinuz-2.2.14-12
label=linux
#initrd=/boot/initrd-2.2.14-12.img
root=/dev/hda6
read-only
리로 설정파일의 암호가 암호화되지 않은 일반 텍스트이므로, 루트만이 억세스 할 수 있도록 다음과 같이 한다.
#chmod 600 /etc/lilo.conf
리로 설정 파일을 수정한 다음 리로를 실행한다.
#/sbin/lilo -v
마지막으로 리로 설정 파일의 변경을 막기위해 lilo.conf 파일을 chattr 명령으로 Immunize(변경불가)로 만든다. (ext2 파일 시스템에서만 사용가능)
#chattr +i /etc/lilo.conf
4) xlock과 vlock
다른 사람이 여러분의 작업을 엿보거나 변조하지 못하도록 콘솔을 잠글 수 있는 기능을 제공하는 프로그램이 xlock과 vlock이다. xlock은 X 윈도우 화면을 잠근다. 이 프로그램은 X를 지원하는 모든 리눅스 배포본에 들어 있다.
일반적으로 여러분이 사용하는 단말기의 아무 xterm에서나 xlock을 실행시킬 수 있으며, 일단 실행이 되면 화면이 잠기게 되고 여러분의 패스워드가 입력되어야 화면을 입력가능한 상태로 되돌릴 수 있게 된다. vlock은 리눅스 가상 단말기의 일부나 전부를 잠글 수 있는 간단한 프로그램이다.
여러 가상 단말기 가운데 본인이 작업중인 하나 만을 잠글 수 있는데 이렇게 되면 다른 사람이 다른 단말기는 쓸 수 있지만 작업중이던 단말기는 본인이 해제하기 전에는 쓸 수 없다. 이 방법은 침입자가 X 윈도우에서 빠져 나오는 것은 막을 수는 없다는 것이다.
침입자가 보통의 버추얼 콘솔 로그인 프롬프트를 가지게 되는 것과 권한을 훔치기 위해서 X11이 시작된 버추얼 콘솔에 들어가서 X11을 잠정적으로 중지시키는 행위를 완전히 막을 수는 없다는 것이다.
이런 이유로 이 방법을 꼭 써야 한다면 xdm이 설정된 상황에서 조건적으로 쓰기를 권한다.
5) 물리적 보안 파손의 감지
항상 점검해야할 최우선 사항은 시스템이 언제 재부팅되었는가이다.
리눅스는 견고하고 안정적인 운영체제이기 때문에 재부팅되어야만 하는 때는 운영체제의 업그레이드나 하드웨어 교체 등을 위해서 재부팅된 경우 뿐이다. 컴퓨터에 침입하는 방법 중 컴퓨터를 재부팅하거나 전원을 꺼야 하는 경우가 많으므로 항상 흔적을 확인하도록 한다. 대부분의 경우 침입자들은 로그파일에서 자신의 흔적을 지워 버리지만 그래도 로그 파일은 모두 살펴보고 일치하지 않는 점을 확인해야 한다.
6) 지역 보안
지역 사용자(local user)들의 공격에 대한 보안이다. 지역 사용자의 사용권한을 얻는 것이야말로 시스템에 침입하고자 하는 사람들이 가장 먼저 시도하는 것 중에 하나다. 지역 사용자들에 대한 보안이 느슨하면 침입자가 여러 가지 버그들과 시스템이 제공하는 서비스 허점을 이용해서 도용한 일반 사용자 계정의 사용 권한을 관리자(root) 사용 권한으로 "업그레이드"할 수 있다.
설령 진짜 사용자라해도 지역 사용자들은 여러분의 시스템을 엉망으로 만들 수 있다.
7) 새로운 계정 만들기
사용자에게 계정을 줄 때는 작업을 위한 최소한의 권한만을 부여하도록 해야 한다. 사용자들이 언제/어디서 로그인하는지 혹은 로그인해야 하는지 알아야 한다. 폐쇄되었거나 사용이 되지 않고 있는 계정은 지운다.
개개인의 사용자는 네트워크 전반의 모든 컴퓨터에 대해서 동일한 user id(uid)를 유지하면서 사용하도록 하는 것이 좋다. 로그파일 분석과 계정관리에 편리하다.
가능한 한 group id(gid)의 사용을 금지되어야 한다.
8) 루트 보안
루트는 컴퓨터 전체에 대한 권한이 있으며 네트워크에 있는 다른 컴퓨터에도 권한을 가질 수 있도록 만들어져 있기도 하다. 루트로 로그인해서 저지르는 실수는 아무리 작은 것이라해도 큰 문제를 일으키게 된다. 루트 계정은 유닉스 시스템에서 가장 강력한 권한을 가지고 있는 계정이다.
만약 관리자가 콘솔로의 접속 후, 로그아웃하는 것을 잊고 루트 프롬프트를 그대로 놔두었다면, 위험한 상황이 벌어질 수도 있다. 이런 상황을 피하기 위해 TMOUT 변수를 사용할 수 있다. /etc/profile 파일 또는 루트의 해당 쉘의 설정파일, 예를 들어 bash라면 .bash_profile에 다음과 같이 설정한다.
#vi ~/bash_profile
HISTSIZE=0
HISTFILESIZE=0
TMOUT=3600
숫자는 초단위다. 3600초 즉, 1시간동안 아무런 입력이 없다면 자동으로 로그아웃.
HISTSIZE 와 HISTFILESIZE 를 0으로 해두는 것도 만약을 위한 조치이다.
9) 확실한 암호체계
1] 암호의 길이
암호의 길이는 5자로 설정되어 있다. 8자 이상으로 바꾸어야 한다.
/etc/login.defs 파일을 수정한다.
PASS_MIN_LEN 8
2] 쉐도우 패스워드 사용
이것은 일반적으로 리눅스 설치시 옵션이다. 이후에는 authconfig 유틸리티를 사용할 수 있으며, 기존 암호들과 그룹등의 쉐도우 패스워드로의 전환은 pwconv, grpconv 같은 명령을 사용할수 있다.
10) console-equivalent 접근
일반 유저의 콘솔 관련 프로그램 사용을 방지한다. 예를 들어 shutdown, reboot, halt와 같은 명령어들 이다. 다음과 같이 한다.
#rm -f /etc/security/console.apps/명령어
11) 사용하지 않는 서비스 지우기
사용하지 않고, 불필요한 서비스 패키지는 삭제한다. 일단 /etc/inetd.conf 파일을 수정해서 사용하지 않는 서비스는 모두 주석처리(#)한후, inetd를 재시동한다.
/etc/inetd.conf 파일을 600 모드로 바꾸어서 루트만이 억세스하도록 한다.
#chmod 600 /etc/inetd.conf
반드시 /etc/inetd.conf 파일의 소유자는 root 여야 한다.
#chown root.root /etc/inetd.conf
inetd.conf 를 수정한다. 예를 들어 ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth등 사용하지 않는 서비스들은 모두 주석처리 한후 inetd 를 재시동한다.
#killall -HUP inetd
/etc/inetd.conf 파일을 immunize 한다.
#chattr +i /etc/inetd.conf
다시 변경이 가능하게 하려면
#chattr -i /etc/inetd.conf
12) TCP_WRAPPER 사용하기
tcp_wrapper는 특정 서비스 요청이 들어 왔을 때 슈퍼데몬인 inetd나 xinetd가 특정 프로그램을 실행하는데, 기본적으로 /usr/sbin/tcpd를 사용한다.
tcpd는 /etc/hosts.deny나 /etc/hosts.allow를 참조하여 서비스의 제공여부를 결정한다.
이것을 wrapper라 부르는데, wrapper는 다른 프로그램을 실행하고 자신은 아무것도 하지 않는 프로그램을 말한다.
tcp wrapper로 서버로의 접근을 제한할수 있다.
/etc/hosts.deny 에
ALL: ALL@ALL, PARANOID 로 모든 접근을 막은후, /etc/hosts.allow 에 허가 해주는 것이다.
hosts.deny 파일을 다음과 같이 수정한다.
ALL: ALL@ALL, PARANOID
hosts.allow 를 다음 예와 같이 수정한다.
ftp: 202.54.15.99 foo.com
위 설정은 ftp 억세스를 ip 주소인 202.54.15.99와 foo.com 도메인을 가지는 클라이언트 들에게 허용한다.
마지막으로 tcpdchk 명령으로 설정파일들의 오류를 확인해 볼수 있다.
13) 시스템 정보
1] 옵션 사용
외부에 서버의 정보를 최대한 보여주지 않는 것도 공격을 예방하는 방법이다.
예를 들어 "/etc/inetd.conf" 의 telnet 옵션을 다음과 같이 수정한다.
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd –h
-h 옵션은 시스템 정보를 보여주지 않고, 사용자에게 id 와 암호만 물어온다.
그러나 언제나 telnet 보다는 sshd 의 사용을 권장한다.
2] 파일 수정
"/etc/host.conf" 파일 수정
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing.
nospoof on
첫번째 줄은 DNS 관련 설정이다. 먼저 DNS 에서 host name을 resolve 하고, 다음 hosts 파일을 참조하라는 것이다. multi 옵션은 /etc/hosts 파일에 다중 IP 주소를 가질수 있다는 것이며, 마지막 nospoof 옵션은 서버로의 스푸핑을 방지한다.
"/etc/services" 파일은 immunize 한다.
#chattr +i /etc/services
14) 루트 로그인의 제한
/etc/securetty 파일은 어떤 TTY 디바이스로 루트 로그인이 가능한지 설정한다. 불필요한 디바이스는 주석처리 한다.
15) 일반 유저의 su root 방지
특정 유저만 su root 할수 있도록 설정하려면 다음과 같이한다. /etc/pam.d/su 파일의 처음에 다음을 추가한다.
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/Pam_wheel.so group=wheel
/etc/group 의 wheel 그룹에 su root를 허용하고자 하는 사용자 그룹 등록한다.
wheel:x:10:root,someone
16) 쉘 로그 파일
bash 쉘은 500여개의 지난 명령어를 ~/.bash_history 에 남기게 된다. 다음과 같이 크기를 줄이거나, 0로 설정해 아예 로그를 남기지 않도록 하여 크래커가 로그 파일의 내용을 이용할수 없도록 하자.
HISTFILESIZE=30
HISTSIZE=30
또는 로그아웃 할때 마다 로그 파일을 삭제하도록 다음과 같은 라인을 ~/.bash_logout에 추가한다.
rm -f $HOME/.bash_history
17) Control-Alt-Delete
Control-Alt-Delete 키를 사용하지 못하도록 한다. /etc/inittab 파일에서 다음과 같은 라인을 찾아 주석처리 한다.
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
수정한 것을 적용하려면
#init q
18) /etc/rc.d/init.d 디렉토리와 파일들의 퍼미션
"/etc/rc.d/init.d" 디렉토리와 파일들의 퍼미션을 다음과 같이 수정하여 루트만이 억세스 할수 있도록 한다.
#chmod -R 700 /etc/rc.d/init.d/*
19) 시스템 정보 숨기기
기본적으로 리눅스 서버로 로그인 할 때 배포본, 버젼, 커널 버젼, 서버이름 등이 나타나도록 되어 있다. 이것은 서버를 노리는 크랙커들에게 더 많은 정보를 줄뿐이다.
"/etc/rc.d/rc.local" 의 수정
rc.local 매 부팅시마다 /etc/issue 파일을 생성하는 루틴이 있다. 이 부분을 모두 주석처리 한다.
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
이슈 파일 삭제
#rm -f /etc/issue
#rm -f /etc/issue.net
20) SUID/SGID 프로그램 찾기
일반 유저가 루트 권한으로 실행 시킬수 있는 불필요한 SUID/SGID 프로그램들은 최소화 한다.
1] SUID/SGID 파일
[root @edu00 /root]#find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls lg {} \;
[root @edu00 /root]#chmod a-s [program]
2] world-writable 파일
[root @edu00 root]#find / -perm -2 -type l -ls
3] 소유자가 없는 파일
[root @edu00 root]#find / -nouser -o nogroup -print
4] remote host 파일
[root @edu00 root]#find /home -name .rhosts
21] 파일 시스템 마운트
잘못된 파일 시스템 마운트 옵션도 보안에 문제가 될수 있다.
파일 시스템 마운트 설정 파일(/etc/fstab)의 옵션
defaults: 기본 옵션, 쓰기,읽기 가능, quota, suid 가능
noquota: 유저 쿼타가 적용되지 않음
nosuid: SUID/SGID 억세스 불가
nodev: special devices 또는 character 사용 불가 (예를 들어 /dev 같은)
noexec: 이 파티션상의 모든 바이너리 실행 불가
quota: 유저 쿼타 사용
ro: 읽기 전용으로 마운트
rw: 읽기,쓰기 허용
suid: SUID/SGID 억세스 허용
/etc/fstab 의 형식은 다음과 같다
# /etc/fstab의 예
/dev/hda9 /tmpext2 defaults,rw,nosuid,nodev,noexec 1 2
/dev/fd0 /mnt/floppy auto sync,user,noauto,nosuid,nodev 0 0
/dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro 0 0
fstab의 수정 후에는 파일 시스템을 다음과 같이 다시 마운트 해야한다.
#mount -o remount /tmp/
22) rpm 바이너리
서버에 필요한 모든 패키지가 설치되었다면 rpm 바이너리를 사용하지 못하도록 플로피로 옮겨놓는다.
#mount /dev/fd0 /mnt/floppy/
#mv /bin/rpm /mnt/floppy/
#umount /mnt/floppy
23) umask 조정
시스템 파일이 만들어질 때 허가권의 기본값을 설정하기 위해서 사용된다.
/etc/profile에서 조정되고 시스템의 모든 사용자에게 적용된다.
'IT > 네트워크관리사2급' 카테고리의 다른 글
스위치란 (0) | 2022.05.20 |
---|---|
네트워크 & 케이블 (0) | 2022.05.20 |
VPN (0) | 2022.05.09 |
FTP 명령어 (0) | 2022.05.04 |
tcpdump 명령어 (0) | 2022.05.04 |