의미없는 블로그
Part 01. 시스템 - Unix/Linux 본문
파일 생성시 기본권한은 666, 디렉터리는 777
여기서 umask 값 설정하면 그 값만큼 빼서 생성된다
umask는 /etc/profile 파일에 지정
chmod go-w daemon.c : 그룹, 아더에서 write 권한 제거
chmod a=rw daemon.c : 모든 사용자에 read, write 권한 부여
chmod g+x, o-x daemon.c : 그룹에는 실행권한 부여, 아더에는 실행권한 제거
chmod u+s daemon.c : suid 설정
chmod 4755 daemon.c : 755권한에다가 suid 설정(rwsr-xr-x)
chmod g+s daemon.c : sgid 설정
chmod 2755 daemon.c : 755권한에다가 sgid 설정(rwx-r-sr-x)
chmod ug+s daemon.c : suid, sgid 설정
chmod 6755 daemon.c : 755권한에다가 suid, sgid 설정(rws-r-s-r-x)
chmod -s daemon.c : suid, sgid 모두 삭제
chmod -R : 하위 디렉터리와 파일까지 권한 변경
<find 명령어>
find / -atime 10 : access, 파일에 마지막으로 접근한 시간이 딱 10일인 것
find / -mtime +10 : modify, 파일이 마지막으로 변경된 시간이 10일 이상
find / -ctime -10 : change, 파일의 속성이 마지막으로 변경된 시간이 10일 이하
find / -type f -print : 일반 파일 찾아서 출력
find / -nouser -print : 소유자 없는 파일 찾아서 출력
find / -nogroup -print : 그룹 없는 파일 찾아서 출력
find -type f -size 3M : 파일 크기가 딱 3메가
find -type f -size +3M : 파일 크기가 3메가 초과
find -type f -size -3M : 파일 크기가 3메가 미만
suid, sgid, stickey-bit, world writable 파일은 아래 나옴
<cron 명령어>
crontab -u test -e : test의 crontab 파일 편집 (edit)
crontab -u test -l : test의 crontab 파일 출력 (list)
crontab -u test -r : test의 crontab 파일 삭제 (rm)
/etc/crontab 파일
분 / 시 / 일 / 월 / 요일 / 작업
(0:일요일)
0 1 * * * batch.sh : 매일 1시에 실행
0 8-10 * * * batch.sh : 매일 8, 9, 10시에 실행
0 12,15,17 * * * batch.sh : 매일 12, 15, 17시에 실행
*/5 * * * * batch.sh : 매 5분 간격으로 실행
#10 3 * * * /usr/lib/krb5/kprop_script : 주석 처리는 실행 안함
아무나 crontab 에 작업 등록 못하도록 접근제어를 할 수 있다
/etc/cron.allow : 허용하는 사용자 등록
/etc/cron.deny : 차단하는 사용자 등록
둘다 존재하면 cron.allow 가 우선하여 등록된 사용자만 crontab 명령 실행할 수 있다
둘다 없으면 대부분의 시스템이 root 만 crontab 명령 실행할 수 있다고 함
<at 명령어>
cron 은 정기적 작업이고 at 은 일회성 작업이다
예약된 작업은 처리 후 목록에서 삭제된다
at -l = atq : 작업 목록 보기
at -t 201312301200
at> /usr/bin/ps -ef
at> (Ctrl+D)
: 2013년 12월30일 12:00 에 명령어 실행
Unix 는 at -r job_id = atrm job_id : 해당 작업 삭제
Linux 는 at -d job_id = atrm job_id : 해당 작업 삭제
at 도 마찬가지로 /etc/at.allow, /etc/at.deny 로 명령어 제한하고 at.allow 가 우선된다
<유닉스/리눅스 서버 보안> p.41
/etc/passwd
root : x : 0 : 0 : root : /root : /bin/bash
- x 는 shadow 패스워드 사용한다는 의미
- uid, gid 는 중복 가능 임의 계정에 0 이면 계정 탈취 의심
- 5번째는 그냥 코멘트
- 6번째는 홈디렉터리
- 마지막 불필요 계정은 /sbin/nologin, /bin/false 로 설정
/etc/shadow
패스워드 암호화 하여 /etc/shadow 에 저장하고
관리자만 읽을 수 있도록 한다 (root 만 read 권한 설정)
- 두번째는 암호화된 패스워드
- 16118 : 마지막으로 패스워드 변경한 날 (1970.1.1 기준)
- 0 : 패스워드 최소 사용기간, 1일 설정 권장
- 99999 : 패스워드 최대 사용기간, 90일 설정 권장
- 7 : 패스워드 만료 이전 경고 일수
암호화된 패스워드는
$해시id$Salt$Encrypted_Password 형식으로 구성되어 있다
id는 SHA 256 이상을 권장
- 1 : MD5
- 2 : BlowFish
- 3 : SHA 256
- 6 : SHA 512
암호화된 패스워드가
- * : 패스워드가 잠긴 상태, 별도의 인증방식(SSH 인증키)을 사용하여 로그인 가능
- !! : 패스워드가 잠긴 상태, 로그인 불가, 계정 생성 후 패스워드 설정 안하면 !! 상태이다
- 빈 값 : 패스워드 설정 안한 상태, 패스워드 없이 로그인 가능 상태, 반드시 패스워드 설정해야 한다
유닉스(솔라리스)는 조금 다른데
- NP : No Password, 로그인 불가능한 계정이란 뜻, 시스템 및 어플리케이션 계정 같은 거
- *LK* : Lock, 패스워드가 잠겨서 로그인 불가
- 빈 값 : 패스워드 설정 안한 상태, 로그인 시 패스워드 설정과정 진행
passwd -l test : test 계정 잠그기
passwd -u test : test 계정 unlock
pwconv : passwd 파일에 암호화된 패스워드 저장되어 있는 경우 shadow 로 이동
pwunconv : shadow 에서 다시 passwd 로 이동
SUID, SGID
- RUID : 프로세스 실행시킨 사용자의 uid
- RGID : 프로세스 실행시킨 사용자의 gid
- EUID : 프로세스 실행 동안에만 부여되는 uid
- EGID : 프로세스 실행 동안에만 부여되는 gid
- SUID : 프로세스 실행 동안에 자원에 접근할 수 있도록 하는 uid
- SGID : 프로세스 실행 동안에 자원에 접근할 수 있도록 하는 gid
SUID, SGID 설정 안된 프로세스
- RUID = EUID = 실행시킨 사용자의 uid
- RGID = EGID = 실행시킨 사용자의 gid
SUID, SGID 설정된 프로세스
- RUID = 실행시킨 사용자의 uid
- RGID = 실행시킨 사용자의 uid
- EUID = 프로세스 소유자의 uid
- EGID = 프로세스 소유자의 gid
4 2 1
suid suid sticky-bit r w x r w x r w x
test 파일은 755(rwxr-xr-x) 상태
- SUID 설정 : chmod u+s test, chmod 4755 test
- SGID 설정 : chmod g+s test, chmod 2755 test
- SUID, SGID 설정 : chmog ug+s test, chmod 6755 test
불필요하게 SUID, SGID 설정되어 있으면 취약하다
주기적으로 검사해서 제거해야
find / -user root -perm -4000
find / -user root -perm -2000
find / -user root \( -perm -4000 -o -perm -2000 \)
find / -user root -type f \( -perm -4000 -o -perm -2000 \) -exec ls -al {} \;
chmod -s test 로 제거 (SUID, SGID 모두 제거)
Sticky-Bit
스티키비트 설정된 디렉터리는 파일 생성은 가능한데
변경, 삭제는 소유자나 root 만 가능하다
4 2 1
suid suid sticky-bit r w x r w x r w x
/tmp 디렉터리는 777(rwxrwxrwx) 상태
- Sticky-Bit 설정(리눅스) : chmod o+t /tmp, chmod 1777 /tmp
- Sticky-Bit 설정(유닉스) : chmod u+t /tmp
슈퍼 데몬 inetd
서버 - 클라이언트 방식의 프로세스 (FTP, TELNET, SSH, HTTP 등) 에서
클라이언트 요청 대기하다가 요청 들어오면 개별 프로세스를 실행
N개의 개별 서버를 하나로 통합하여 가지고 있다가
클라이언트 요청 오면 개별 프로세스 실행하는 방식
이렇게 하면 서버 리소스 줄일 수 있다고 한다
Stand Alone 방식
- 개별 서비스별로 개별 프로세스가 동작
- 클라이언트의 요청이 언제 들어올지 모르는 상태에서 항상 서비스가 가능
- 속도가 빠른데 서버 리소스가 많이 든다
- 독립적인 설정 파일
inetd(xinetd) 방식
- 요청이 있을 때마다 슈퍼 데몬을 이용해서 개별 프로세스를 동작
- 슈퍼 데몬에 의해 불러졌을 때만 메모리에 상주하고 종료되면 메모리에서 제거됨
- 상대적으로 느리지만 서버 리소스 줄일 수 있다
- /etc/(x)inetd.conf
- TCP Wrapper 에 의해 접근 제어
/etc/(x)inetd.conf
- 서비스명 : /etc/services 참조해서 포트 결정
- 소켓 : TCP - stream, UDP - datagram
- 프로토콜 : /etc/services 와 일치해야
- 플래그 : nowait - 요청 받은 이후에 즉시 다음 요청 처리, wait - 요청 처리 기다렸다가 다음 요청 처리
- 실행시킬 사용자
- 실행 경로
- 실행 인수
불필요한 서비스는 비활성화
- DoS 공격 관련 Simple TCP 서비스 : echo, discard, daytime, chargen
- r 계열 서비스(인증없이 원격접속) : rlogin, rsh, rexec
- 불필요한 rpc 서비스 : rpc, cmsd, rusersd
- 기타 서비스 : finger, tftp, talk
주석처리 후 inetd 데몬 재시작
/etc/inetd.conf 는 위와 같은 설정파일이고
/etc/inetd.d/telent 같은 개별 파일 있다
- no_access : TCP Wrapper 말고 자체적으로 접근제어도 가능하다
- only_from : 접근 허용 대역
- access_time : 지정한 시간에만 접근 허용
- cps 50 10 : 초당 연결 50개 / 50개 초과 시 10초간 일시중지
- instance 100 : 동시에 서비스할 수 있는 서버 개수 100개
- per_source : 동일 출발지 IP의 최대 서비스 연결 개수 10개
- log_on_failure : 접속에 실패했을 경우 로그 기록
- log_on_success : 접속 성공했을 경우 로그 기록
- PID : xinetd 데몬의 pid
- HOST : 원격 호스트 ip
- USERID : 원격 사용자 id
- EXIT : 프로세스 종료 상태
- DURATION : 서버 세션 지속 시간
<TCP Wrapper> p.71
/etc/hosts.allow, /etc/hosts.deny 에 접근제어
hosts.allow 먼저 확인 -> hosts.deny 확인 -> 아무 설정 없으면 default 모든 접근 허용
아까 슈퍼 데몬에서 TCP Wrapper 사용해서 접근제어 할 수 있다고 했는데
- 사용전 : telnet stream tcp nowait root /user/sbin/in.telnetd in.telnetd
- 사용후 : telent stream tcp nowait root /usr/sbin/tcpd in.telnetd
이렇게 /etc/inetd.conf 에 명시해줘야 한다
tcpd 가 hosts.allow, hosts.deny 참고하여 접근제어 수행 후 해당 서비스 실행한다
[서비스] : [아이피]
ALL : ALL
ALL : 192.168.35.140
in.telnetd : 192.168.1.1, 192.168.1.2
in.telnetd : 192.168.1. -> 192.168.1 로 시작하는 모든 IP
in.telentd : .test.com -> test.com 도메인에 속한 모든 URL
ALL : LOCAL -> 같은 네트워크의 모든 호스트
ALL EXCEPT in.ftpd : ALL
hosts.allow 에 이렇게 설정하고
hosts.deny 에 ALL : ALL 로 설정하면 화이트리스트 방식
hosts.deny 에 shell_command 작성
in.telnetd : 192.168.0.104 : twist /bin/echo "192.168.0.104 는 연결이 거부되었음"
-> 192.168.0.104 의 telnet 접속을 거부하고 클라이언트(192.168.0.104)에게 저 메시지를 전송한다
in.telnetd : 192.168.0.104 : spawn /bin/mail -s "%a is denied" root
-> 192.168.0.104 의 telnet 접속을 거부하고 root 에게 저 제목으로 메일을 발송한다
- %a : 클라이언트 IP
- %A : 서버 IP
PAM은 리눅스에서 어플리케이션 인증 관련된 것
/lib/security 또는 /usr/lib/security 에 있는 인증 모듈들 갖다 쓴다
telnet 이나 ftp 등 사용할 때 PAM 을 통해 인증한다고 함
프로그램 개발할 때에도 인증모듈 개발 안하고 PAM 을 플러그인 형태로 사용하기도 한다고 함
1) 각 어플리케이션(login, telnet, ftp 등)은 인증이 필요할 때 PAM 라이브러리를 호출한다
2) 해당 어플리케이션의 PAM 설정파일 있는데 여기 내용 참조하여 PAM 모듈 수행되고 결과를 어플리케이션에 반환
3) 어플리케이션은 반환 결과를 통해 인증 여부를 결정한다
[/etc/pam.d]
PAM 라이브러리를 이용하는 어플리케이션의 설정 파일이 위치, 설정 파일명과 어플리케이션명 동일함
[/lib/security]
PAM 라이브러리가 제공하는 여러 인증 모듈들 존재
[/etc/security]
PAM 모듈 실행에 필요한 추가 설정 파일 존재
PAM 설정파일 내용을 봐보자
[/etc/pam.d/remote] remote 어플리케이션의 PAM 설정파일 이다
1) type : PAM 모듈 종류이다
- auth : 계정의 패스워드를 검증, 패스워드 인증, OTP/보안카드 인증 등
- account : 계정의 유효성을 검증, 계정의 유효기간, 접속 가능 시간, 서비스 접근 허용여부 등
- password : 계정의 패스워드 설정 및 변경 조건을 지정, 패스워드 최소 길이, 복잡도 등
- session : 계정 인증처리 전후에 수행할 적업을 지정, 홈 디렉터리 마운트, 메일함 생성 등
2) control : 모듈 실행 후 행동 결정
- required : 인증을 위해선 반드시 이 모듈에 대한 실행결과가 성공이 되어야 함
이 모듈에 대한 실행결과가 실패할 경우 나머지 모듈 테스트는 계속 진행
근데 전체 결과만 실패로 알 뿐 어디서 실패했는지 정보는 확인 불가
- requisite : 얘도 인증을 위해선 반드시 이 모듈에 대한 실행결과가 성공이 되어야 함
차이점은 실행결과가 실패할 경우 나머지 모듈 테스트 없이 실패값을 리턴
- sufficient : 실행결과가 성공일 경우 같은 interface 에 대한 테스트는 수행하지 않고 성공으로 끝남
단 이전에 위치한 required 모듈의 테스트가 모두 성공으로 끝났을 경우
- optional : 이 모듈에 대한 테스트 결과는 무시됨
- include : 다른 PAM 관련 서비스가 포함되며 해당 서비스의 인증이 통과되어야만 인증이 성공함
PAM 활용 - root 계정 원격 접속 제한
/etc/pam.d/remote 설정파일에
auth required pam_securetty.so 모듈 추가
/etc/securetty 파일에
#pts/0
#pts/1 주석처리
tty - 모니터, 키보드 등을 통해 사용자가 콘솔로 직접 로그인
pts - 텔넷, 터미널 등을 통해 원격 접속
/etc/pam.d/login 설정파일에
auth required /lib/security/pam_securetty.so 이렇게도 하네
SSH 서비스 root 원격접속 막으려면
/etc/ssh/sshd_config 설정파일에
PermitRootLogin no 설정하고
service sshd restart
PAM 활용 - 계정 잠금 임계값
/etc/pam.d/system-auth 설정파일에
auth required pam_tally2.so deny=5 unlock_time=120(초)
5회 틀리면 잠기고 120초 지나면 풀린다
이렇게도 있다
account required /lib/security/pam_tally.so deny=5 unlock_time=120 no_magic_root
account required /lib/security/pam_tally.so no_magic_root reset
no_magic_root : root 계정은 잠금 설정 적용 안함
reset : 접속 성공 시 실패한 횟수 초기화
PAM 활용 - root 계정 su 제한
/etc/group 의 wheel 그룹에 su 명령어 사용할 사용자 추가
usermod -G wheel test
/etc/pam.d/su 설정파일에
auth required pam_wheel.so use_uid debug 추가
auth required /lib/security/pam_wheel.so debug group=wheel 또는
auth required /lib/security/$ISA/pam_wheel.so use_uid
sudoers 파일
test ALL=(ALL) ALL : test 계정은 sudo 명령을 통해 모든 호스트에서 모든 명령 실행 가능
test ALL=(ALL) NOPASSWD: ALL : test 계정이 sudo 명령할 때 비밀번호 확인 없이 가능
test 192.168.35.140=(ALL) ALL : test 계정은 sudo 명령을 통해 192.168.35.140 호스트에서 모든 명령 실행
test ALL=(ALL) /was/batch/log_batch.sh : test 계정은 sudo 명령을 통해 모든 호스트에서 root 권한으로 log_batch.sh 명령 실행 가능
test ALL=(root, kiwi99) ALL : test 계정은 모든 호스트에서 root, kiwi99 권한으로 모든 명령어 실행
<로그 관련> p.85
리눅스 - /var/log 디렉터리에 저장
유닉스 - /var/adm 디렉터리에 저장
utmp : 현재 로그인한 사용자의 상태정보
리눅스 - /var/log/utmp
유닉스 - /var/adm/utmpx
w, who, finger 명령어 사용
wtmp : 성공한 로그인/로그아웃 정보, 시스템의 boot/shutdown 정보
리눅스 - /var/log/wtmp
유닉스 - /var/adm/wtmpx
last 명령어 사용
last test
last reboot
lastlog : 가장 마지막으로 성공한 로그인 정보
리눅스 - /var/log/lastlog, lastlog, finger 명령어 사용
유닉스 - /var/adm/lastlog, finger 명령어 사용
lastlog -u test 하면 최근 접속 기록 확인 가능
lastlog -t 5 하면 5일내 접속 기록 확인 가능
btmp(리눅스), loginlog(유닉스) : 실패한 로그인 정보
리눅스 - /var/log/btmp, lastb 명령어 사용
유닉스 - /var/adm/loginlog, vi 로 확인, 5회 이상 실패시 로그 남김
sulog : su 명령어 사용한 결과
리눅스 - /var/log/secure
유닉스 - /var/adm/sulog
+ 는 su 명령 성공했음을 의미
- 는 su 명령 실패했음을 의미
acct/pacct : 로그인한 사용자가 로그아웃할 때까지 사용한 명령어, 터미널 타입, 프로세스 시작 시간 등
리눅스 - /var/account/pacct (accton /var/account/pacct 명령 실행해야 생성됨)
유닉스 - /var/adm/pacct (/usr/lib/acct/accton /var/adm/pacct 명령 실행해야 생성됨)
lastcomm 명령어 사용
플래그
- S : 슈퍼유저/root 에 의해 실행
- F : exec 없이 fork 에 의해 실행
- X : SIGTERM 시그널에 의해 종료
history : 실행한 명령어 리스트
.bash_history 이렇게 로그파일 생성됨
vi 로 열어보거나 history 명령어 사용
secure : 사용자/그룹 생성 및 삭제, 로그인, 원격 접속 내역, su 명령 수행 내역 등
리눅스 - /var/log/secure
messages : 데몬 실행 상태, 사용자 접속정보, TCP Wrapper 접근제어 등
리눅스 - /var/log/messages
dmesg : 리눅스가 부팅될 때 출력되는 모든 메시지
리눅스 - /var/log/dmesg
vi 로 열어보거나 dmesg 명령어 사용
boot.log : 리눅스가 부팅될 때 파일 시스템 체크, 서비스 데몬 실행상태 등
리눅스 - /var/log/boot.log
데몬이 많이 나오면 boot.log
xferlog : FTP 로그 파일
리눅스 : /var/log/xferlog
- 파일 전송 날짜
- 전송 소요 시간 : 1초
- 원격 호스트
- 전송 파일 크키 : 1011 bytes
- 전송 파일명 : test.c
- 전송 파일 종류 : a(아스키), b(바이너리)
- 액션 플래그 : _(아무 액션 없음), C(압축 파일), U(압축되지 않은 파일), T(tar 파일)
- 전송 방향 : i(파일을 서버로 올림), o(파일을 서버에서 내림), d(파일을 서버에서 삭제)
- 사용자 접근 방식 : r(real 인증된 사용자), a(anonymous 익명 사용자)
- 로그인 사용자
- 서비스명
- 사용자 인증 방법 : 0(없음)
- 인증 사용자 ID : *(인증된 사용자 ID를 사용할 수 없음)
- 파일 전송 상태 : c(complete 전송 완료), i(incomplete 전송 실패)
cron 로그 : 정기 작업에 대한 로그
리눅스 - /var/log/cron
maillog : 메일 송수신 내역 로그
리눅스 : /var/log/maillog
메일을 한번 이상 사용한 사용자는 /var/spool/mail/test 이렇게 메일 파일 생성됨
<syslog> p.96
syslog 가 발전되어 rsyslog 되었다
여기에 로그 관련 설정하면 되고
/etc/syslog.conf
/etc/rsyslog.conf
형식은 이런식이다
facility.priority; facility.priority action
facility 는
* : 모든 서비스
auth, authpriv : 인증, 보안 관련
cron : cron, at 관련
daemon : ftp, telnet 같은 데몬 관련
kern : kernel 관련
lpr : 프린터 lpd 데몬 관련
mail : sendmail, pop 관련
news : 뉴스시스템 관련
uucp : uucp 관련
user : 사용자 관련
syslog : syslog 데몬 관련
local0 ~ local7 : 시스템 부팅 관련
priority 8가지
emergency : 시스템 전면 중단되는 위험한 상황
alert : 즉각 조치 필요
critical : 하드웨어 등 심각한 오류
error : 일반적 에러
warning : 경고
notice : 관리자 조치 필요
information : 의미있는 정보 관련
debug : 디버깅 메시지
action 은
/var/log/secure : 그냥 로그 기록한 파일명
/dev/console : 콘솔에 출력
@192.168.35.140 : 원격 서버에 기록
user : 지정된 사용자에게 스크린 메시지
* : 로그인한 모든 사용자에게 스크린 메시지
원격 서버에 기록하는 법
1) 원격 로그 서버의 rsyslog.conf 에 다음과 같이 설정
$ModLoad imudp.so
$UDPServerRun 514
2) rsyslogd 데몬과 514 포트 열려있는지 확인
ps -ef | grep rsyslogd
netstat -anup | grep rsyslogd
3) 방화벽에서 514 포트 허용
iptables -A INPUT -p udp --dport 514 -j ACCEPT
4) 원격 로그 보낼 서버에서 rsyslog.conf 에 원격 로그 서버 설정
*.* @192.168.35.140
5) 원격 로그 서버에서 로그 확인
tail -f /var/log/secure (-f 는 실시간 추가되는 내용들 출력)
syslog.conf(rsyslog.conf) 예시
kern.* /dev/console
커널 메시지를 /dev/console 에 출력
*.info;mail.none;authpriv.none;cron.none /var/log/messages
모든 서비스의 info 수준 이상의 로그를 /var/log/messages 에 기록
mail, authpriv, cron 서비스는 로그 기록 X
mail.* /var/log/maillog
메일 관련해서 모든 수준의 로그를 /var/log/maillog 에 기록
*.emerg *
모든 서비스의 emerg 수준 이상의 로그를 모든 사용자에게 스크린 메시지
로그 파일 계속 커지니까 logrotate
logrotate.conf 에 설정한다
daily, weekly, monthly : 일, 주, 월 단위로 순환
rotate 4 : 순환 파일 개수 4개
create 600 root root : 순환시 새롭게 로그파일 생성
dateext : 로그파일 확장자로 날짜 붙여서 보관
compress, uncompress : 로그 파일 압축, 압축 안함
size 100K : 100K 되면 로그파일 순환
include /etc/logrotate.d : 이 디렉터리에 데몬들 있는데 각 데몬들의 설정 파일을 포함
/var/log/httpd 의 모든 로그에 적용
missingok : 로그파일 없어도 오류 발생 안한다
notifempty : 로그파일 비어있는 경우 순환 안한다
sharedscripts : 로그파일 여러개 있어도 스크립트를 공유하여 prerotate, postrotate 스크립트를 한번만 실행
postrotate/endscript : 순환 후 스크립트 파일 실행
<Unix/Linux 서버 취약점> p.115
1. root 계정 이외 uid 0 금지
/etc/passwd 파일 살펴보고 uid 0 인 계정이 있는지 확인
적절한 uid 를 부여하거나 해당 계정 삭제
usermod -u 500 test
chuser id=500 test (AIX)
2. 패스워드 복잡성 설정
3. 패스워드 최소 길이 "8자 이상"
4. 패스워드 최대 사용기간 "90일(12주) 이하"
5. 패스워드 최소 사용 기간 "1일 or 1주"
솔라리스 - /etc/default/passwd
PASSLENGTH = 8
MAXWEEKS = 12
MINWEEKS = 1
리눅스 - /etc/login.defs
PASS_MIN_LEN 8
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
AIX - /etc/security/user
minlen = 8
maxage = 12
minage = 1 (주)
HP-UX - /etc/default/security
MIN_PASSWORD_LENGTH = 8
PASSWORD_MAXDAYS = 90
PASSWORD_MINDAYS = 1
6. 패스워드 파일 보호
패스워드 암호화해서 보호해야 한다
솔라리스, 리눅스 - /etc/shadow 가 있고 /etc/passwd 두번째 필드가 x 가 된다
AIX - /etc/security/passwd 에 기본 암호화 저장
HP-UX - /tcb 디렉터리가 있고 /etc/passwd 두번째 필드가 x 가 된다
Trusted mode 가 있어서 패스워드 암호화해서 /tcb/files/auth 에 저장
7. 세션 타임 아웃
계정 접속 후 일정시간 이후 연결 종료하도록
sh, ksh, bash - /etc/profile 에서
TMOUT = 600 (초)
export TMOUT
csh - /etc/csh.login 또는 /etc/csh.cshrc 에서
set autologout = 10 (분)
<파일 및 디렉터리 관련> p.129
1. root 계정 PATH 환경변수
.bash_profile 파일에
PATH = .:$PATH 맨 앞에 . 추가하면
echo $PATH 했을 때
.:/usr/lib/bin:/usr/kerberos/sbin: ... 이렇게 추가된다
그러면 /bin 디렉터리보더ㅏ 현재 디렉터리가 우선된다
그 위치에 조작된 명령어 넣고 실행시킬 수 있다
-> $PATH 변수에 경로 맨 앞이나 중간에 . 이 없어야 한다
제거하거나 맨 뒤로 보내야
2. 소유자/소유그룹 없는 파일 및 디렉터리
uid, gid 가 남아있을 뿐
소유자/소유그룹이 표시되지 않는 파일 및 디렉터리 관리
find / \( -nouser -o -nogroup \) -exec ls -al {} \; 이걸로 검색해서
chown, chgrp 으로 변경한다
3. world writable 파일
모든 사용자 others 에 쓰기권한 있는 파일
find / -perm -2 -exec ls -al {} \; 또는
find / -perm -0002 -exec ls -al {} \; (0002 란 others 에 -------w- 이렇게)
쓰기권한 제거하거나 해당 파일 삭제
chmod o-w 파일명 (others 에 write 제거)
rm -rf 파일명
4. 주요파일 소유자 및 권한 설정
/etc/passwd root 소유 644
/etc/shadow root 소유 400
/etc/hosts root 소유 600
/etc/(x)inetd.conf root 소유 600
/etc/syslog.conf root 소유 644
/etc/services root 소유 644
<윈도우 계정 관련> p.134
1. Administrator 이름 변경하기
패스워드 brute-force 할 수 있으므로
왜냐하면 윈도우 Administrator 는 로그인 임계값 없다
2. Guest 계정 비활성화
외부 사용자가 컴퓨터에 잠시 접근할 수 있는 계정
불특정 다수가 접근할 수 있으므로 제한
3. 불필요 계정 제거
불필요 계정, 장기간 사용 안하는 계정 삭제 또는 계정 잠금
4. 관리자 그룹에 최소한의 사용자 포함
관리자 그룹에 불필요 계정 제거
5. 암호/패스워드 정책
- 패스워드 복잡성 설정 : 암호 복잡성 "사용"
영대/영소문/숫자/특수문자 2가지 조합 10자리 이상 / 3가지 조합 8자리 이상
- 최근 패스워드 기억 : "12개"
- 최대 사용 기간 : "90일 이하"
계정 속성에 "암호사용기간제한없음 해제"
- 최소 사용 기간 : "1일 권장"
- 패스워드 최소 길이 : "8자 이상"
- 해독 가능한 암호화 사용 : "사용 안함"
6. 계정 잠금 정책
- 계정 잠금 기간 : "60분 이상"
- 계정 잠금 임계값 : "5회 이하"
- 다음 시간 후 계정 잠금수를 원래대로 설정 : "60분 이상"
<윈도우 로그 관리> p.147
감사정책을 설정한 이벤트만 로그 남긴다
감사정책 수준이 너무 낮으면 보안사고 발생 시 원인파악 어렵고
너무 높으면 불필요 항목이 많이 기록되어 성능상 문제
적절히 필요한 로그를 남겨야
계정 엑세스 - 감사 안함 - 파일, 디렉터리 접근 등 너무 많음
계정 관리 - 실패 - 계정 생성, 변경, 삭제, 암호변경 등
계정 로그온 이벤트 - 성공, 실패
권한 사용 - 실패 - 권한 사용시
디렉터리 서비스 엑세스 - 실패
로그온 이벤트 - 성공, 실패
시스템 이벤트 - 감사 안함
정책 변경 - 성공, 실패
프로세스 추적 - 감사 안함
로그온하고 정책 변경 관련된건 성공, 실패 모두 감사하고
계정 엑세스, 시스템 이벤트, 프로세스 추적 이런 뭔가 엄청 많을거 같은건 감사 안함
<서비스 관리> p.143
기본 공유 제거
- 하드디스크 기본 공유 : C$ D$ -> 이거 제거해야
- 원격관리 및 IPC 기본 공유 : ADMIN$, IPC$
net share 로 학인해서
net share C$ /delete
net share D$ /delete
레지스트리 설정 가서
HLMS\CurrentControlSet\Services\LanmanServer\Parameters 에
AutoShareServer = 0 으로 설정
일반 공유 폴더에 Everyone 그룹권한 제거
-> 공유폴더 속성에서 권한에 Everyone 그룹 제거
불필요 서비스 제거
취약한 서비스 없도록
- Alerter
- Clipbook
- Messenger
- Simple TCP/IP Services
-> Services.msc 에서 불필요 서비스 사용안함으로 설정
'# 나 > pentest (WEB)' 카테고리의 다른 글
Part 04. 정보보호 일반 (0) | 2019.05.22 |
---|---|
칼리리눅스 Vmware Tools 설치 (0) | 2019.05.22 |
Part 02. 네트워크 - ARP, IP, ICMP, TCP, UDP, 포트스캐닝 (0) | 2019.05.13 |
Part 02. 네트워크 - DoS, DDoS, DRDos, 무선랜, VPN, IPsec, SSL/TLS, 라우터 (0) | 2019.05.10 |
Part 04. 침해사고 분석 및 대응 - snort, iptables (0) | 2019.05.08 |