크래킹 도구 취약점 점검 도구

구분

툴 이름

특징

트로이목마 해킹 도구

AOL4FREE.COM,

Shark2

 

루트킷 도구

lrk5

 

안티 루트킷 도구

 

Icesword

- 윈도우 안티 루트킷

Chkrootkit

- 리눅스 안티 루트킷

패스워드 크랙

John the Ripper

- Solar Designer 개발한 무료 패스워드 크랙 도구

- 윈도우, 리눅스, 맥 버전까지 모두 지원

패스워드 덤프

pwdump

 

패스워드 취약점 점검

 

L0phtCrack

 

ipcrack

- 원격지에서 패스워드 취약점 점검

패스워드 리셋

 

chntpw

- 물리적 접근이 가능한 시스템에서 패스워드 리셋

ERD Commander

- 윈도우 패스워드 리셋

포트스캐닝

 

SAINT

 - HTML 형식의 보고서 기능

- 원격 취약점 점검 기능

Nmap

- 대표적인 포트 스캐닝 도구

키 로거

Keycopy,

keylogwin,

Keylog25,

Winhawk,

perfectkeylog

 

취약점 점검

 

 

 

NESSUS

- 서버 클라이언트 구조로, 클라이언트의 취약점 점검

- Nmap, gtk 기반 동작

SARA

- 대규모 네트워크 점검 가능

- SATAN 모델 기반

- SANS TOP20 취약점 점검

COPS

- 시스템 내부 취약점 점검 (패스워드 체크 )

nikto2

- 오픈소스

- 웹서버 스캔

무결성 점검

tripwire

- 무결성 도구

- 오픈 소스 소프트웨어

- MD5, SHA, CRC-32 다양한 해시 함수 지원

- 초기화 이후 관리자에 의해 파일 시스템을 스캔하고 스캔 파일들의 정보를 각각 데이터베이스에 저장. 이후 같은 파일을 스캔하여 데이터베이스에 저장된 결과와 비교

접근 통제 도구

TCP_Wrapper

 - 아래 참조

스캔 탐지 도구

portsentry

 

로깅 도구

 

syslog
rsyslog

- 유닉스, 리눅스 계열에서 사용

- 초기에는 syslog 사용하였으나, 현재는 개선된 rsyslog 사용

- 데몬: rsyslogd

- 설정 파일: /etc/rsyslog.conf (알림 규칙, 로그 파일 권한 )

webalizer

- 리눅스 계열

- 아파치 웹로그 분석

방화벽

 

Mod_Security

- Apache 오픈소스 방화벽

- httpd.conf 파일에 아래와 같이 설정

   <IfModule mod_security.c>

      정책

   </IfModule>

WebKnight

- IIS 오픈소스 방화벽

메일 보안

Spam Assassin

- 스코어 점수를 이용하여 스팸 여부를 판단하는 방법으로 스팸 메일을 차단하는 도구

- Rule 기반으로 Header Body 분석하여 실시간으로 차단

 

Snort

- 오픈소스 Network IDS

- snort 헤더와 옵션으로 구성됨

- 실시간 패킷 모니터링, 사전에 정의된 패킷 분석, 로그 형태로 공격 여부 확인

- Rule Header

Header

설명

alert

알람 발생 및 로깅

log

로깅

pass

무시

activate

알람 발생 및 대응하는 Dynamic 활성화

dynamic

activate에 의해 일정시간 동안 활성화되면 로깅

drop

iptables를 통해 패킷 차단 및 로깅

reject

drop과 동일하며, 메시지를 남김

sdrop

패킷을 드랍하지만 로깅하지 않음

- 옵션

Rule 옵션

설명

msg

Alert, Log 출력 이벤트명으로 사용

content

페이로드 내부를 검색하는 문자열

offset

Content에서 검색할 문자열 Offset

nocase

대소문자 구분 안함

rev

Rule 수정 횟수

sid

Rule 식별자

depth

지정한 바이트까지 탐색

- Flag

Flag

설명

S

SYN

F

FIN

A

ACK

U

URG

P

PSH

R

RST

- 사용법 예시

   1) 외부에서 내부 대역(192.168.0.0/24)으로 접근하는 TCP SYN FIN 검출

       : alert tcp any any -> 192.168.0.0/24 any (msg:”SYN-FIN Scan”; flags:SF;)

   2) 내부 대역(192.168.0.0/24)에서 외부로 나가는 모든 UDP 트래픽 탐지 후 메시지 띄우기

       : alert udp 192.168.0.0/24 any -> !192.168.0.0/24 any (msg:”outbound udp”; sid:1000001;)

   3) 내부 telnet 서버(192.168.0.6)로 외부에서 접근하려는 트래픽 탐지 후 메시지 출력

       : alert tcp !192.168.0.0/24 any -> 192.168.0.6/24 23 (msg:”telnet detected”; sid:1000002;)

   4) 외부에서 내부 대역(192.168.0.0/24)으로 접근하는 IP 패킷 중 데이터 크기가 6000 bytes 보다 큰 패킷 검출

       : alert ip any any -> 192.168.0.0/24 any (dsize: >6000; msg:”Large IP Packet”;)

   5) 외부에서 내부 대역(192.168.0.0/24)으로 접근하는 IP 패킷 중 attack이라는 문자열을 가지고 있는 검출 (대소문자 구분 안함)

       : alert ip any any -> 192.168.0.0/24 any (content:”attack”; msg:”attack word detected”; nocase)

   6) 목적지에 1초에 10번 이상 웹 접속을 요구하는 패킷 검출 (10 바이트까지 패킷 검사)

       : alert tcp any any -> any any (msg:”Get Flooding”; Content:”GET/HTTP1”; depth 10; Threshold:type threshold, track by_dst, count 10, seconds 1; sid:1000003;)

 

iptables DROP vs REJECT

- DROP: 패킷 차단, 송신자에게 아무런 메시지 보내지 않음

- REJECT: 패킷 차단, 송신자에게 Destination Unreachable 메시지 보냄

 

유닉스/리눅스 환경변수 확인  설정

 

유닉스/리눅스 백그라운드 실행  작업 확인

 

리눅스 Sticky bit, SetUID, SetGID

- Sticky bit:

   1) 설정된 디렉터리에서는 누구나 파일을 생성할 있으나 삭제는 본인과 관리자만 가능

   2) chmod 1xxx <파일명> 또는 chmod u+t <파일명> 또는 chmod o+t <파일명> 사용하여 설정 가능

   3) -rw-r--r-T  1 root   root     0 Oct 22 20:44 aaaa

- SetUID

   1) 소유자의 권한으로 파일을 실행시킬 수 있는 특수 권한

   2) chmod 4xxx <파일명> 또는 chmod u+s <파일명> 사용하여 설정 가능

   3) -rwSr--r--  1 root   root     0 Oct 21 18:58 a

      -rwsrwxrwx  1 root   root     0 Oct 22 20:41 aaa

      ※ 기존에 실행권한을 갖고 있을 경우, 소문자 s

- SetGID

   1) 소유 그룹의 권한으로 파일을 실행시킬 수 있는 권한

   2) chmod 2xxx <파일명> 또는 chmod g+s <파일명> 사용하여 설정 가능

   3) -rw-r-Sr--  1 root   root     0 Oct 21 18:58 aa

      ※ 기존에 실행권한을 갖고 있을 경우, 소문자 s

SetUID 권한을 가진 파일 찾기: find / -user root -perm 4000 -exec ls -l { } \,

 

/etc/passwd 파일 구조

- root:x:0:0:root:/root:/bin/bash

- <계정>:<암호화여부>:<UID>:<GID>:<Comments>:<홈디렉터리>:<쉘>

 

/etc/shadow 파일 구조

- user1:$1$rEbAAbZF$TtRAuraiZlgk9St9u73UK.:17644:0:99999:7:::

- <계정>:<암호화된 패스워드>:<1970-01-01부터 계산된 마지막 패스워드 바꾼 날짜까지 경과일>:<최소 사용 일수>:<최대 사용 일수>:<최대 사용기간 며칠 전에 경고 메시지 보낼지>:<미사용 시 잠금일>:<계정 만기일>:<미사용 필드>

- pwconv pwunconv 명령어

   1) pwconv: /etc/shadow 파일을 사용하여 패스워드 관리

   2) pwunconv: /etc/passwd 파일에서 패스워드 관리 (패스워드 노출 위험)

- $1$rEbAAbZF$TtRAuraiZlgk9St9u73UK. 의미

   1) $1: ID, 해시 알고리즘 (해시 값의 고유 식별자)

   2) $rEbAAbZF: Salt, 동일한 패스워드가 설정되더라도 서로 다른 Hash 값을 가지도록 해서 암호화 강도를 높임, 레인보우 테이블을 이용하여 크래킹을 시도할 Salt 인해 패스워드가 서로 다른 값을 가지게 되어 공격을 방어

   3) $TtRAuraiZlgk9St9u73UK.: 암호화 패스워드 (Hash )

 

/etc/login.defs

- 사용자 계정 설정과 관련된 기본값 정의

- 주요 옵션

PASS_MAX_DAYS

패스워드 최대 사용 일수

99999

PASS_MIN_DAYS

패스워드 최소 사용 일수

0

PASS_WARN_AGE

패스워드 만료 며칠 전부터 경고 메시지 보여줄 것인지

7

UMASK

 

022

UID_MIN

 

1000

UID_MAX

 

60000

 

umask

- 디렉터리는 777에서 umask 값을 빼고, 파일은 666에서 umask 값을 

- umask 확인 명령어: umask

- umask 설정 명령어: umask umask

- 기본값: 022

 

/etc/default/useradd

- 사용자 생성 기본값 정의

- 주요 옵션

GROUP

100

HOME

/home

INACTIVE

-1

EXPIRE=

 

SHELL

/bin/bash

SKEL

/etc/skel

CREATE_MAIL_SPOOL

yes

 

/etc/securetty

- root 로그인할 있는 터미널 지정

 

vsftpd.conf 주요 파라미터

- local_enable: 로컬 계정 사용자들의 접속 허용 여부

- port_enable: Active Mode 사용 여부 (기본값: YES)

- local_umask: 로컬 계정 사용자들의 umask 설정 (기본값: 022)

- xferlog_enable: 로그를 남길지 여부

 

TCP Wrapper

- 호스트 기반 네트워크 ACL

- 인터넷 슈퍼데몬으로 구동되는 서비스에 대한 접근제어 로깅

- tcpd inetd 서비스를 래핑(Wrapping)하여 tcpd 제어권을 가짐

- 주요 기능:

   1) 접근 제어

      - 호스트 접근제어: /etc/hosts.deny, /etc/hosts.allow

      - 서비스 접근제어: /etc/inetd.conf

   2) 로깅

   3) 모니터링, 필터링

 

리눅스/유닉스 주요 명령어/프로그램

- who, w: 현재 컴퓨터에 로그인 사용자 목록과 모든 유저와 작업 목록을 제공

- last: 사용자의 로그인/로그아웃, 시스템 시작/종료 기록 확인

- lastcomm: 사용자가 로그인한 후부터 로그아웃할 때까지 입력한 명령과 시간, 작동된 tty 등에 대한 정보 확인

- rlogin: 원격 로그인 명령, 원격 접속지에 .rhosts 또는 /etc/hosts.equiv 파일에 호스트가 등록되어 있어야 , 암호 입력 없이 원격 접속이 가능하기 때문에 보안상 취약하여 현재는 사용되지 않음

- awk: 텍스트 형태의 입력 데이터를 행과 단어 별로 처리하여 출력하는 프로그램, 문자열 데이터와 연관 배열, 정규 표현식을 주로 사용

- nohup: HUP(Hangup) 신호를 무시하도록 만드는 명령어, HUP 신호는 터미널이 의존 프로세스들에게 로그아웃을 알리는 방식

- wc: 주어지는 파일 또는 표준 입력의 바이트, 문자, 단어, 라인 수를 출력하는 프로그램

- lsof: 열려있는 모든 파일과, 그 파일들을 열고 있는 프로세스들의 목록을 출력

- sulog: su 명령어 시도 실패/성공 로그 (날짜 시간, 성공 실패(+/-), 터미널, 시도한 사용자, SU 대상 사용자)

- cksum: 체크섬 추출 (예시: cksum /etc/* >/test/checksum)

- diff: 서로 다른 파일이나 디렉터리 비교

- uname: Linux Kernel Version 확인할 있는 명령어로, 주로 -a 옵션으로 확인 가능

- ssh-keygen: SSH 생성 도구

- ndd: Unix 시스템에서 네트워크 관련 장치의 파라미터 확인

 

find 명령어 옵션

- st 파일 생성보다 늦게 sp 파일 생성보다 빨리 변경된 파일 검색

# find / -newer st ! -newer sp -ls > sum

- inetd.conf 파일을 검색

# find / -name inetd.conf 2> /dev/null

- SetUID 설정 파일 검색

# find / -user root -perm -4000 -print

-수정(mtime) 30 이내의 파일 검색 (mtime 파일 내용이 수정될 변경됨)

# find / -mmin -30 -type f -ls

- 수정(mtime) 3 이상된 파일 검색 (mtime 파일 내용이 수정될 변경됨)

# find / -mtime +3 -type f -ls

- 수정(ctime) 3 이내의 파일 검색 (ctime 파일 속성, 권한, 크기 inode값이 수정될 변경됨)

# find/ -ctime -3 -type f -ls

 

crontab 명령어 주요 옵션

-e

edit user's crontab

-l

list user's crontab

-r

delete user's crontab

 

tar 명령어 주요 옵션

c

파일 압축

x

압축 해제

v

상세히

f

파일 이름 지정

z

gzip으로 압축/해제

 

proftpd 보안 설정

- chroot 제한 (wheel 그룹 외에 chroot 제한)

# vi /etc/proftpd.conf 또는 vi /usr/local/etc/proftpd.conf

<중략>

DefaultRoot ~ !wheel

- root 접속 차단

# vi /etc/proftpd.conf 또는 vi /usr/local/etc/proftpd.conf

<중략>

RootLogin off

- Root 소유 파일 숨김

# vi /etc/proftpd.conf 또는 vi /usr/local/etc/proftpd.conf

<중략>

HideUser root

HideGroup root

 

SSH 보안 설정

- root 접속 차단

# vi /etc/ssh/sshd_config

<중략>

PermitRootLogin no

 

logrotate

- /etc/logrotate.conf 파일 주요 옵션

    1) weekly: 매주 로테이트

   2) rotate 4: 4개의 파일로 순환

   3) create: 이전 로그 파일 이후에 파일 생성

   4) compress: 로그 파일 압축

   5) include /etc/logrotate.d: 로그 로테이션 정보를 /etc/logrotate.d 보관

- /etc/logrotate.d/[RPM] 설정 예시 (/etc/logrotate.d/apache2)

/var/log/apache2/access_log {

    compress

    dateext

    maxage 365

    rotate 99

    size=+4096k

    notifempty

    missingok

    create 644 root root

    sharedscripts

    postrotate

     systemctl reload apache2.service

     sleep 60

    endscript

}

 

오류 메시지 분류

- debug

- info

- notice

- warning

- err

- crit

- alert

- emerg

 

리눅스 주요 로그 파일

- /var/run/utmp: 현재 로그인한 사용자들에 대한 상태정보 저장, who 명령어에 사용

- /var/log/boot.log: 부팅 발생되는 메시지 기록, 보통 부팅 동작하는 데몬 관련 정보 기록

- /var/log/wtmp: 사용자 접속 이력, 시스템 재부팅 기록, last 명령어로 확인

- /var/log/btmp: wtmp와 반대되는 로그로, 접속 실패 이력 기록, lastb 명령어로 확인

- /var/log/lastlog: telent, ssh 등을 이용해서 접속한 사용자의 마지막 정보 기록, lastlog 명령어로 확인

- /var/log/cron: cron 관련 로그 기록

- /var/log/dmesg: 시스템이 부팅 출력된 로그 기록, 보통 커널 부트 메시지 로그라고 부름

- /var/log/messages: 시스템에서 발생하는 표준 메시지 기록, root만 읽을 있음

- /var/log/secure: 인증에 기반한 접속과 관련된 로그 기록, 보통 telnet, ssh, tcp_wrappers, xinetd 관련 로그 기록
- /var/log/
sulog: Switch User를 사용한 로그 기록

- /var/log/xferlog: FTP 접속 관련 작업 기록

- /var/log/account/pacct: 사용자가 로그인한 후부터 로그아웃 할 때까지 입력한 명령과 시간, 작동된 tty 등에 대한 정보, lastcomm 명령어로 확인 (기본값은 비활성화, accton /var/account/pacct 명령어로 활성화)

 

Crontab

- 표기법: min hour day mon week user command

- 예시: 30 9,13 * * 0 * /btc.sh (매주 일요일 930, 1330분에 /btc.sh 실행)

 

리눅스 파일 ACL

- 기본적으로 리눅스에서는 chmod 권한 설정을 있지만, 파일 ACL 통해 세부적으로 권한을 나눌 있음

- 예를 들어, 사용자 계정 별로 권한을 다르게 있음

- Ex: 소유자는 Root인데, User1에게는 읽기만, User2에게는 쓰기만, User3에게는 읽기/쓰기 권한 부여

- getfacl: 파일 ACL 확인

- setfacl: 파일 ACL 설정 (ls 명령어로 확인 + 기호가 붙음)

 

PAM(Linux Pluggable Authentication Modules)

- 애플리케이션과 서비스에 대한 동적 인증을 제공하는 모듈

- 인증 작업을 4가지 독립적인 관리 그룹으로 분리

   1) 계정 모듈(account module): 명시된 계정이 현재 조건에서 유효한 인증 목표인지를 검사

   2) 인증 모듈(authentication module): 비밀번호를 요청하고 검사하는 것 같이 사용자의 신원을 확인하고 인증 정보를 keyring 같은 다른 시스템들에 전달

   3) 비밀번호 모듈(password module): 비밀번호 갱신

   4) 세션 모듈(session module): 세션 시작과 끝에 수행되는 행동을 정의

- /etc/security/limits.conf : 도메인(계정,그룹,) 사용할 있는 시스템 자원 제어

   1) 설정 예시:

       *               soft    core            0

       *               hard    nofile          512

       @student        hard    nproc           20

       @faculty        soft    nproc           20

       @faculty        hard    nproc           50

       ftp             hard    nproc           0

       @student        -       maxlogins       4

       :123            hard    cpu             5000

       @500:           soft    cpu             10000

       600:700         hard    locks           10

- /etc/pam.d/password-auth: 계정 임계값 설정

   1) 설정 예시:

      auth required pam_tally2.so deny=5 unlock_time=60

   2) 주요 옵션

      - deny=??회: ??회 틀렸을 경우 계정잠금

      - unlock_time=??초: 계정 잠금 ?? 후 잠금 해제

      - no_magic_root: 루트 계정 잠금 설정 안함

      - reset: 접속 성공하면 실패 회수 초기화

 

윈도우 보안

- UAC (User Account Control): 관리자가 권한 수준을 높이는 것을 허용할 때까지 응용 프로그램들은 표준 사용자 권한으로 제한하는 보안 기능

- Smart Screen 필터: 피싱 또는 악성 프로그램 웹 사이트 및 응용 프로그램과 잠재적인 악의적인 파일 다운로드로부터 보호하기 위해 유해 사이트 프로그램 다운로드/설치 제어

- BitLocker: 이동식 디스크 드라이브를 암호화

 

윈도우 보안 식별자(SID, Security Identifier)

- 보안 사용자 또는 보안 그룹을 고유하게 식별 하는 데 사용

- 형식 예시: S-1-5-21-3623811015-3361044348-30300820-1013

   1) S: 문자열이 SID임을 나타냄

   2) 1: SID 규격 버전

   3) 5: 식별자 권한

   4) 21-3623811015-3361044348-30300820: 도메인 로컬 식별자 ID

   5) 1013: 상대 ID값

 

윈도우 주요 명령어/프로그램

- cipher: 디렉터리 파일 암호화, 주요 옵션 -> /e: 암호화, /d: 복호화, /s: 디렉터리 지정(하위 디렉터리 모두 적용), /w: 데이터 제거

- runas: 윈도우에서 임시적으로 상위 권한을 가진 계정으로 작업을 수행하도록 해주는 명령어

- net

   1) net share: 모든 공유 리소스 확인 또는 제거

   2) net user: 사용자 계정 확인 및 관리

   3) net session: 현재 원격 로그인 된 사용자 확인 또는 세션종료

   4) net computer: 도메인 데이터베이스에서 컴퓨터를 추가하거나 삭제

   5) net accounts: 사용자 계정 데이터베이스 수정, 계정 보안 정책 수정

- ncpa.cpl: 네트워크 환경 설정

 

netstat

- 프로토콜 통계와 현재 TCP/IP 네트워크 연결 표시

- 리눅스에서도 netstat 명령어가 있으나, 최근 리눅스 버전에서는 netstat 명령어는 deprecated 되었음

- 최근 리눅스 버전에서는 ss (Socket Statistics)명령어 사용

- 주요 옵션

-a

모든 연결 및 수신 대기 포트를 표시

-n

주소 및 포트 번호를 숫자 형식으로 표시

-o

각 연결의 소유자 프로세스 ID를 표시

-p proto

proto로 지정한 프로토콜의 연결을 표시 (TCP, UDP, TCPv6, UDPv6)

-r

라우팅 테이블을 표시합니다.

 

SS 명령어 주요 옵션

-a, --all

모든 소켓 표시

-l, --listening

리스닝 중인 소켓 표시

-m, --memory

소켓 메모리 사용량 표시

-p, --processes

소켓을 사용중인 프로세스 표시

-t, --tcp

TCP 소켓만 표시

 

윈도우 시스템 프로세스

- lsass.exe: 시스템에 접근하려고 하는 사용자 체크를 담당

- csrss.exe: 윈도우의 콘솔을 관장하고 스레드를 생성/삭제

 

OLE (Object Linking and Embedding, 객체 연결 삽입)

- 마이크로소프트가 개발한 기술로서 문서와 기타 객체에 연결과 삽입을 도와주는 연결규약

- 윈도우의 각종 응용 프로그램 간에 데이터를 공유할 있는 기능

 

윈도우의 인증 구성 요소

- SAM: 계정 정보에 대한 데이터베이스 관리, 로그인 입력 정보와 SAM 데이터베이스 정보 비교하여 인증 여부 결정

- SRM: SAM에서 인증을 거친 SID 부여, SID 기반하여 파일/디렉터리 접근 제어 감사 메시지 생성

- LSA: 로그인 검증, 시스템 자원 파일 접근 권한 검사, SRM 생성한 감사 로그 기록, 보안 하위 시스템(Security Subsystem)이라고도 불림

- NTLM: 사용자가 계정과 연결 된 암호를 알고 있음을 서버나 도메인 컨트롤러에 증명하는 챌린지 응답 메커니즘을 기반으로 사용자와 컴퓨터를 인증

 

윈도우 레지스트리 (regedit)

- HKEY_CLASSES_ROOT: 확장자 설정, 기타

- HKEY_CURRENT_USER: 사용자 설정 (프로그램 설정 포함)

- HKEY_LOCAL_MACHINE: 모든 사용자의 설정 정보, 시스템 정보

- HKEY_USERS: 각 사용자 별 프로파일에 대한 HKEY_CURRENT_USER 키에 일치하는 서브키

- HKEY_CURRENT_CONFIG: 실행 시간에 수집한 자료 저장. 종료 시 데이터 삭제됨

 

윈도우 기본 공유 폴더

- C$, D$

- ADMIN$: 시스템 루트 디렉터리(%SYSTEMROOT%) 원격 관리

- IPC$: 서버 원격 관리 필요

 

윈도우 Null Session 차단

- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\restrictanonymous 2 설정

 

DDE (Dynamic Data Exchange)

- Microsoft Windows 및 OS/2의 초기 버전에서 사용되는 프로세스 간 통신을 위한 기술

- DDE를 사용하면 프로그램이 다른 프로그램에서 제공하는 개체를 조작하고 해당 개체에 영향을 주는 사용자 작업에 응답 할 수 있음

- DDE는 부분적으로 OLE(Object Linking and Embedding)로 대체되었으며 현재 이전 버전과의 호환성을 위해서만 Windows 시스템에서 유지 관리됨

- 엑셀 등 오피스 프로그램에서 이 기능이 활성화 될 시 악용이 될 있음

https://en.wikipedia.org/wiki/Dynamic_Data_Exchange

 

SMB (Server Message Block)

- 도스나 윈도우에서 파일이나 디렉터리 주변 장치들을 공유하는 사용되는 메시지 형식

- NetBIOS는 SMB 형식에 기반을 두고 있으며, 많은 네트워크 제품들도 SMB를 사용

서버 메시지 블록 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

파일 시스템 구분

- FAT16: 용량이 적은 이동식 드라이브에서 사용, 윈도우 95까지 주로 이용

- FAT32: 윈도우98, 윈도우 Me 같은 구형 운영체제에서 사용, 리눅스 OS X 같이 윈도우 호환성이 필요할 사용, 현재는 사용되지 않음

FAT 뒤에 숫자는 최대 클러스터 개수를 의미

- NTFS: FAT 대체, 윈도우 2000 이후 사용, 자체 보안 설정 가능, 파일 정보를 MFT 파일 테이블에 저장, 시스템 고장과 디스크 손상에 대한 복구 가능

- ext3: 저널링 파일 시스템, 다른 저널링 파일 시스템에 비해 낮은 처리 속도, 조각 모음 기능이 없음

- ext4: 저널링 파일 시스템, 최대 1엑사바이트 볼륨, 최대 16테라바이트 파일, Extent 사용하여 단편화를 줄이고 대용량 파일 접근 성능 향상, 하위 호환성(ext2, ext3), 지연된 할당(Allocate-on-Flush) 기술을 사용하여 성능 향상

- xfs: 저널링 파일 시스템, 최대 8엑스비바이트 볼륨, 고성능, 대부분의 리눅스 배포판에서 지원되고 그중 일부는 기본 파일 시스템으로 사용

 

I-Node

- 정규 파일, 디렉터리 등 파일 시스템에 관한 정보를 저장하는 구조체

- 파일들은 각자 1개의 아이노드를 가지고 있음

- I-Node 포함된 정보

   1) 파일 모드(접근 권한)

   2) 링크 수 (아이노드에 대한 디렉터리 참조 수)

   3) 파일 소유자의 아이디

   4) 그룹 소유자의 아이디

   5) 파일 크기

   6) 파일 주소

   7) 마지막으로 파일에 접근한 시각

   8) 마지막으로 파일을 수정한 시각

   9) 마지막으로 아이노드를 수정한 시각

   파일명은 없음

https://ko.wikipedia.org/wiki/%EC%95%84%EC%9D%B4%EB%85%B8%EB%93%9C

 

디스크 관련 용어

- 섹터: 디스크에서 가장 작은 물리 스토리지 유닛, 각 섹터는 고정된 양의 데이터 저장

- 클러스터: 파일과 디렉토리에 대해 디스크 공간을 할당하는 단위, 파일시스템은 인접한 섹터 집단인 클러스터를 할당

 

PCB (Process Control Block, 프로세스 제어 블록)

- 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조

- PCB 포함된 정보

   1) 프로세스 식별자(Process ID)

   2) 프로세스 상태(Process State): 생성/준비/실행/대기/완료

   3) 프로그램 계수기(Program Counter)
   4) CPU 레지스터 및 일반 레지스터

   5) CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등

   6) 메모리 관리 정보

   7) 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등

   8) 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%A0%9C%EC%96%B4_%EB%B8%94%EB%A1%9D

 

레지스터 종류

- PC (Program Counter)

- MAR (Memory Address Register)

- MBR (Memory Buffer Register)

- IR (Instruction Register)

 

Unix/Linux 파일 속성 (chattr/lsattr)

- 명령어 사용법: chattr -[옵션] [모드] file or directory

- 옵션: RVfvp

   1) R: 하위 디렉터리까지 적용

   2) V: 자세히

   3) f: 오류메시지 출력하지 않음

   4) v: 파일의 버전 설정

   5) p: 파일의 프로젝트 번호 설정

- 모드: +-=[ASacDdIijsTtu]

   주요 모드 설명

   1) a: 파일에 추가만 있음 (디렉터리에 설정할 경우 파일 생성만 가능)

   2) c: 압축된 상태로 저장

   3) d: dump 명령어로 백업할 제외

   4) i: 파일을 수정/삭제/이름변경 등을 없으며, 링크도 생성할 없음

   나머지 모드에 대해서는 man chattr (1): change file attributes on a Linux file system (manpages.org) 참고

 

SYN Flooding 대응 방법

- Windows

   1) 다음 레지스트리 값 변경: TcpMaxHalfOpen, TcpMaxHalfOpenRetried

- Linux

   1) Backlog Queue 확장

       : sysctl -w net.ipv4.tcp_max_syn_backlog=[변경값]

   2) Syncook-ies 기능 활성화: TCP Header의 특정 부분을 암호화 -> 공격자의 리소스를 소비하게 함

       : sysctl -w net.ipv4.tcp_syncook-ies=1

   3) 기타 네트워크 설정 최적화

       - TCP SYN 재시도 횟수 제한: sysctl -w net.ipv4.tcp_syn_retries=[변경값]

       - TCP 재시도 횟수 제한: sysctl -w net.ipv4.tcp_retries1=[변경값]

       - TCP 연결 끊기 전 재시도 횟수 제한: sysctl -w net.ipv4.tcp_retries2=[변경값]

 

버퍼 오버플로우 방지 방법

- strcpy, strcat 등 취약한 함수 사용 금지 (strncpy, strncat 등 사용)

   strcpy의 경우, 버퍼의 크기를 고려하지 않고 NULL byte를 만날 때까지 문자열을 복사

- Stack Guard: Canary라고 불리는 무결성 체크 값을 삽입하여 스택 변조가 발생했는지 확인

- 운영체제 내에서 제공하는 커널 옵션 적용

   1) CentOS: ASLR(Address Space Layout Randomization) 적용

      ASLR: 스택, , 라이브러리의 주소를 랜덤화하여 메모리를 보호하는 기법

      echo 2 > /proc/sys/kernel/randomize_va_space

      0: ASLR 해제

      1: 랜덤 스택 & 라이브러리 활성화 (기본값)

      2: 랜덤 스택 & 라이브러리 & 힙 활성화

   2) 솔라리스: /etc/system 파일에 다음 옵션값 적용

      noexec_user_stack = 1

      noexec_user_stack_log = 1

+ Recent posts