상세 컨텐츠

본문 제목

[정보보안기사] 시스템 보안

[Tech] 국가기술자격증/정보보안기사

by tech-dailylife 2020. 2. 9. 22:25

본문

반응형

시스템 보안은 End Point인 서버 Client 단의 보안요소로 OS 취약점, 서버 계정 관리 및 로깅/설정 등이 중요합니다.

 

- CPU 내부 레지스터 종류

PC : 다음 수행할 명령어가 저장된 주기억장치의 번지를 지정
MAR : 주기억장치에 접근하기 위한 주기억장치의 번지를 지정
MBR : 주기억장치에 입/출력할 자료를 기억하는 레지스터
IR : 주기억장치에서 인출한 명령코드를 기억하는 레지스터

- 버퍼 오버플로
스택 영역에 데이터를 덮어 씌움으로써 리턴되는 복귀주소를 변경하여 원하는 임의의 명령어를 실행시키는 공격
* 메모리 영역 : Text(코드, 프로그램 명령어), Data(정적 변수, 전역 변수), Heap(동적 변수), Stack(함수, 프로시저, 지역 변수)
* 버퍼 오버플로 대응법 :
운영 체제 커널 패치, 함수로부터 복귀하기 전 스택의 무결성 검사, 스택에서의 쓰기 권한 제한, 스택에서 프로그램 실행 금지, 가능성이 있는 SUID 프로그램 제한, StackGuard 프로그램 컴파일러 기술 사용
* 해당 코드
if(strlen(argv[0])>=1024)

스택 오버플로우와 힙 오버플로우 존재

- Race Condition
병행  시스템에서 프로세스가 두 개 이상의 동작을 동시에 수행하려고 할 때 발생하는 비정상적인 상태
* 경쟁 조건 공격 방법 :
취약점 프로그램이 생성하는 임시파일 이름 파악 > 생성될 임시파일과 같은 이름 파일 생성 > 이에 대한 심볼릭 링크 생성 > 원본 파일을 지운 후 취약 프로그램이 해당 이름의 파일 생성하기를 기다림 > 생성되면 심볼릭 링크를 이용하여 파일 내용 변경 > 이를 통해 악의적인 공격(권한 획득 등)
* 경쟁 조건 대응법 :
임시 파일을 만들지 않음, Unlink를 수행할 수 없게 만듬, umask를 최하 022로 유지

- 유닉스 서버 초기 보안 설정
1. 컴파일러 속성은 root만 사용하도록 권한 설정
ls -l /usr/bin/gcc /usr/bin/g++
lsattr /usr/bin/gcc /usr/bin/g++
=> 현재의 퍼미션 확인
chmod 100 /usr/bin/gcc /usr/bin/g++
chattr +i /usr/bin/gcc /usr/bin/g++
=> 퍼미션 변경(root만 실행 가능하고 읽기 전용으로 변경함)
2. 주요 환경파일 압축 후 백업
tar -cvzf etc.tgz /etc
tar -cvzf named.tgz /var/named
tar -cvzf qmail.tgz /var/qmail
=> /etc Directory 파일, DNS, 메일 서버 백업
3. Run Level Script 활성화를 분석하여 재정의 수행
chkconfig -list를 사용하여 각 서비스의 Run Level별 활성화 확인하고 불필요한 서비스 제거

ntsysv로 현재 Run Level 서비스 상태를 확인 및 변경
4. ssh 원격 접속 서비스 보안
ssh만 사용하고 telnet 서비스 차단

ssh로 접속시 root로 접속 가능한 것을 차단함

5. proftpd 서버에서 chroot 적용 및 root 접속 제한
# vi /server/proftpd/etc/proftpd.conf
DefaultRoot ~ !wheel
=> wheel 그룹 이외에 자신의 홈 디렉토리 위의 상위 디렉토리로 이동 불가
RootLogin off
=> Root 계정으로 접속을 차단 함
HideUser root
HideGroup root
=> Root 소유의 파일을 보이지 않도록 설정
6. su 명령어는 wheel 그룹 사용자만 실행권한 부여
ls -l /bin/su
=> su 명령어의 권한 확인( -rwsr-x--- )
chgrp wheel /bin/su
=> 그룹을 wheel로 지정
chattr +i /bin/su
 => 읽기 전용으로 수정
7. 시스템 명령어 파일 및 속성 금지
chmod 750 /usr/sbin/useradd
chmod 750 /usr/sbin/userdel
chmod 750 /usr/sbin/usermod
chmod 750 /usr/bin/top
chmod 750 /sbin/fdisk
chmod 750 /sbin/mkfs*
chmod 750 /sbin/fsck*
=> 권한 변경
chattr +i /usr/sbin/useradd
chattr +i /usr/sbin/userdel
chattr +i /usr/sbin/usermod
chattr +i /usr/bin/top
chattr +i /sbin/fdisk
chattr +i /sbin/mkfs*
chattr +i /sbin/fsck*

8. SetUID 및 SetGID 파일 권한 조정
find / -user root -perm +4000 -print
=> SetUID 권한 파일 찾기
chmod 100 /bin/ping /bin/ping6
=> 불필요한 SetUID 권한 제거

- 유닉스 로그
1. a.cct /pacct : 유닉스에서 실행된 모든 명령어를 기록, history에 비해 명령 옵션은 기록하지 않음
2. .history : 사용자 별 명령어를 기록하는 파일
csh, bash 등 사용하는 쉘에 따라 .history, bash_history 파일로 기록
3. last log : 최종 로그인 정보를 기록
4. logging : 로그인 실패 시도 기록
5. messages : 시스템 콘솔에서 출력된 Boot 메시지 등의 결과를 기록
syslogd에 의해 생성된 메시지 또한 기록
6. sulog : su 명령어와 관련된 기록
날짜 및 시간, +/-(성공/실패), 사용한 터미널 이름, From 사용자, To 사용자
#vi /etc/syslog.conf
authpriv.info /var/log/sulog
#/etc/init.d/syslog reload
=> syslog 설정 파일을 다시 읽음
7. syslog : Application 및 OS의 주요 동작내역을 기록
8. utmp : 현재 로그인한 사용자의 정보를 기록
9. wtmp : 사용자의 시스템 시작 및 종료 시간, 로그인, 로그아웃 시간 등을 기록
10. btmp : 로그인 실패 5회 로그 기록
11. secure : ssh 로그
#cat /var/log/secure
=> 비정상적인 로그인을 시도하는 IP 파악
#vi /etc/hosts.deny
=> 접속 차단해야 하는 IP 주소 등록

- 리눅스 패스워드 설정
1. /etc/login.defs 파일 설정
MAIL_DIR : 메일박스 디렉터리 지정(default = /var/spool/mail
PASS_MAX_DAYS : 패스워드 변경 후 재변경 없이 지속적으로 사용할 수 있는 최대 일자(default = 99999)
PASS_MIN_DAY : 패스워드 변경 후 다시 변경할 수 있는 최소 일자(default = 0)
PASS_MIN_LEN : 인정될 수 있는 패스워드의 최소 길이를 지정, 패스워드로 사용할 수 있는 최소 문자수(default = 5)
PASS_WARN_AGE : 패스워드 사용일자가 종료되기 며칠 전부터 경고메시지 전송 여부를 결정(defualt = 7)
UID_MIN : 새로 생성되는 사용자에게 자동으로 할당할 수 있는 UID 시작 번호를 지정(default = 500)
UID_MAX : 새로 생성되는 사용자에게 자동으로 할당할 수 있는 최대 UID 번호를 지정(default = 60000)
CREATE_HOME : 홈 디렉터리를 생성할 것인가의 여부(default = yes)
UMASK : permission mask 값을 지정(default = 022)
USERGROUPS_EAB : userdel 실행 시 멤버가 없는 그룹도 삭제할 수 있는지 여부(default = yes)
MD5_CRYPT_ENAB : 패스워드 암호화를 위해  MD5 또는 DES 사용(default = MD5) 
ENCRYPT_METHOD SHA512 : 기본설정에는 없지만 암호화 방법으로 SHA512를 사용하도록 함

- 서버 침입 확인
1. 시스템에 침입자가 숨겨놓은 파일 검색

10일 이내 변경된 파일 검색

숨겨있는 파일 검색

/dev 밑에 일반 파일이 있는지 검색 (있으면 안됨)

2. 정상적인 프로그램을 변조했는지 확인

다른 프로그램들이 기본적으로 설치시간과 다르게 변경되는 것이 있는지 확인(특히 ls, ps, netstat)

strace -e trace = open ls(strace -e trace = open ps)
rpm -V filesutils
=> 명령 결과가 S, 5... /bin/ls로 나타난다면 파일 크기와 내용이 변조되었다는 의미

rootkit 확인 : (not infected-정상파일, INFECTED-변조된파일, nothing found-찾을수 없음, not tested-파일 변조 여부 체크 하지 못함) => #chkrootkit | grep INFECTED

3. 리눅스의 strace(솔라리스 : truss, hp : trace) : 시스템 콜이 호출된 것을 추적할 수 있는 프로그램
strace -o trace.txt -c ./mytest3
car trace.txt
=> 프로세스가 받은 signal 정보 획득, c 옵션으로 시스템 콜 통계 정보 획득, p 옵션으로 실행중인 프로세스 추적
4. rpm
패키지 설치 및 제거를 관리

- 파일 시스템 변조 확인
시스템 실행 파일 변경 유무 점검 : /bin/login, 모든 /usr/etc/in.* 파일들, /lib/libc.so.*, inetd에서 호출되는 모든 것
/etc/passwd, /etc/shadow 파일 확인 : uid가 0인 계정이 없어야 함, 불법적인 새로운 계정 없어야 함, 암호가 없는 계정이 없어야 함
/etc/inetd.conf 확인 : 불법적으로 추가된 서비스가 없어야 함
열린 port 확인 : ps -ef나 netstat -an으로 연결되어 있는 상태 점검, nmap 등의 스캔 프로그램으로 확인, lsof로 확인
cron, at 확인 : 통상 해당 명령어로 백도어를 만들기 때문에 검사가 필요
시스템, 네트워크 설정 확인 : /etc/hosts.equiv, /etc/hosts,lpd와 모든 .rhosts 파일에 '+' 항목이 있는지 확인 후 제거
Tripwire로 시스템의 MD5 결과값 백업 : MD5 비교

- TCP Wrapper : inetd로 구동되는 서비스에 대한 접근제어 및 로깅 툴
클라이언트가 inetd에 요청 > inetd은 tcpd에게 제어권 넘김 > tcpd는 접근 제어목록 검사 > 사용자에게 허용 및 차단

- 쿠키 취약점 및 대응법
쿠키 : 클라이언트인 웹 브라우저에 저장하는 4kilo byte 저장소, 쿠키의 이름 값, 만료일, 유효 경로, 유효 도메인을  가지고 있음
쿠키 값 유추(쿠키 값 데이터 알고리즘이 간단) => 추측하기 어려운 데이터 값 사용
네트워크 상의 도청(네트워크 스니핑을 통한 쿠키 값 가로채기) => SSL, VPN 사용하여 네트워크 경로 암호화
웹서버의 의도적 링크(도메인 내의 악의적인 코드가 있는 웹 페이지를 방문했을 때 생기는 취약점) => 홈페이지 개발자가 의도적 코드가 있는지 확인하고 지속적으로 관리
메일로 인한 쿠키 약탈(악의적인 코드가 있는 메일을 읽을 때) => 메일을 읽지 않거나 읽을 때 악의적 코드 존재시 강제 로그아웃 시킴
클라이언트에 설치된 백도어를 통한 쿠키 약탈 => 백도어 조심

- 보안 점검 도구
SAINT : 네트워크 취약점 분석 도구, HTML 형식 보고서 기능, 원격 취약 점검 기능
SARA : SATAN 기반의 네트워크 기반 컴퓨터, 서버, 라우터, IDS 취약점 분석 도구, HTML 형식 보고서 기능
COPS : 시스템 취약점 점검 도구, 내부 취약점
Nessus : 네트워크 취약점 점검 도구, 클라이언트/서버 구조로 클라이언트 취약점 점검, 약 600개 이상
Nmap : 대표적 포트 스캐닝 도구

- Command Injection 공격
변수 입력 값 검증 미흡으로 내부 시스템 명령어를 외부에서 실행 가능한 취약점
=> 지정된 입력 값 이외 다른 값 입력 허용 차단, 특정 ID 값을 case로 정해 이외의 값 차단

exex()나 system() 함수 사용 주의

- DLL Injection 공격
행 중인 다른 프로세스에서 특정 DLL 파일을 강제로 삽입하는 공격

- Window Script Host(WSH)
윈도우 환경에서 업무를 자동화하기 위한 스크립트
이메일에 첨부하여 악용될 수 있음 => 이메일 스캐닝할 때 .wsh 확장자 첨부는 제거해야 함

- Null Session
윈도우에 비인가된 사용자가 Null Session을 통해 사용자 인증을 우회하고 서버에 접근, 시스템 내부에 접근할 수 있는 취약점 존재
1. 인증된 사용자만 접속을 허용
Regedit 실행 > HKLM\SYSTEM\CurrentControlSet\LSA 레지스트리 검색 > IDWORD 값을 선택 > RestrictAnonymous의 키 값을 2로 변경하여 Null Session 차단
2. 자동 공유 폴더 제거 ( registry 활용 )
HKLM\SYSTEM\CurrentConrolSet\Services\lanmanserver\parameters
AutoShareServer 키 값에 0을 입력
3. 자동 공유 폴더 제거 ( net 명령 활용 )
net share로 공유 폴더 확인
net share d$ /delete로 불필요한 공유 폴더 제거

- 윈도우 RPC
1. 취약점을 가진 시스템으로 TCP/135번 포트 공격(DCOM, RPC 공격)
2. 공격 성공 시 TCP/4444번 포트를 통해 관리자 권한 획득
3. tftp(UDP/69번 포트)를 이용하여 웜 파일(msblast.exe) 다운로드
4. 1~3과정 반복(DCOM, RPC 공격 반복)
대응법 : MS 버퍼오버플로 패치 다운로드 설치, 레지스트리 값 제거, Windows auto update에서 msblast.exe를 삭제

- find 명령어 옵션
-amin N : N분 내 접근한 파일 검색
-cmin N : N분 내 퍼미션 변경된 파일 검색
-mmin N : N분 내 내용 변경된 파일 검색
-atime N : N일 내 접근한 파일 검색
-ctime N: N일 내 퍼미션 변경된 파일 검색
-mtime N : N일 내 내용 변경된 파일 검색
-prem [+-]모드 : 해당 퍼미션인 파일 검색
-name [파일명] : 파일명이 일치하는 파일 검색
-anewer [파일명] : 파일보다 더 최근 접근된 파일 검색
-cnewer [파일명] : 파일보다 더 최근 변경된 파일 검색
-newer [파일명] : 파일보다 더 최근 파일 검색
-type [bcdpfls] : 타입에 해당하는 파일 검색(b : 블록 특수파일, c : 캐릭터 특수파일, d : 디렉토리, p : 파이프, f : 일반 파일, l : 심볼릭 파일, s : 소켓)
-size N : 사이즈 검색(+, - 가능)


-OWASP Top 10
1. 인젝션 : SQL, LDAP 등의 파라미터 입력 방식 취약점
2. XSS : 악성 스크립트 삽입
3. 빈약한 전송
.........(생략)

2013년 이후에 2017년 버전이 나왔습니다.

- sticky bit
생성은 누구나 가능, 삭제는 소유자

- 저널링(Journalling) 파일시스템
주 파일 시스템에 변경사항을 반영하기 전에 저널(파일 시스템의 지정된 영역 내의 원형 로그) 안에 생성되는 변경 사항을 추적하는 파일 시스템, 시스템 크래시나 전원 문제가 발생하면 이러한 파일 시스템은 더 빠르게 온라인 상태로 돌아오며 손상될 가능성이 낮음
FSCK를 통한 파일 복구는 느려서 EXT3에서는 저널링 기능을 추가하여 파일 시스템 변경시, 저널링에 먼저 수정 내용을 기록하여 갑작스런 다운 시에 빠르게 오류 복구하는 역할

반응형

관련글 더보기

댓글 영역