커리큘럼
정보보안1 - 가상머신과 리눅스 설치 - 파일시스템 보안 (파티션 자동 설치시 보안 취약점, Exploit 공격, Disk DoS 공격) - 파일의 소유권과 허가권 (set-uid, set-gid, sticky-bit, set-uid backdoor) - 계정관리 - c & pyhthon을 이용한 패스워드 크랙 분석 - PAM 모듈 분석 및 backdoor - SElinux - iptables vss firewalld - iptables 확장 모듈과 방화벽 룰의 이해 - 호스트 방화벽 - 네트워크 방화벽 NAT 이해 - bash / python을 이용한 로그분석 자동화 도구 제작 - 로그 관리 및 분석 (시스템, 애플리케이션, 공격로그 ... ) - 원격 로그 서버 구축 - 패치의 이해와 서버 업데이트 - 백업의 이해 (로컬, 리모트) 및 rsync over ssh 활용한 백업서버 구축 - TCP Wrapper 이해 및 보안 - Xinetd의 이해 - SSH, 웹서버 보안 - 주요정보통신기반시설 기술적 취약점 분석 / 쉘 스크립트 제작 정보보안2 - 개발환경 구축 - glibc 라이브러리 이해 - 분석 도구 환경 gdb 분석 도구의 이해, 바이너리 분석 - 메모리 구조의 이해 (text, data, bss, heap, stack ... ) - 리눅스 시스템 프로그래밍 (open, read, write ... ) - 함수 포인터 이해 - 소켓 프로그래밍 (c & python 활용) - bind shell, reverse shell - 어셈블리 기초 (ATT, INTEL, GAS, NASM) - 함수의 프롤로그와 에필로그, 호출규약, 스택 프레임 - 쉘코드의 이해와 제작 (Reverse Shell Code 제작) - 리눅스 워 게임 취약점 공격 기법 분석 (대분류 : 시스템, 네트워크, 웹해킹) |
교안 : /LINUXBOAN1/ 폴더 사용
1. 파티션을 직접 분할하지 않고 자동으로 설치
2. 파티션을 직접 분할하여 자동으로 설치
└기타 저장소 옵션 - 파티션을 설정합니다(I) 체크
실습환경
IP ADDRESS : 192.168.100.100, 101
SUBNET MASK : 24(255.255.255.0)
GATEWAY : 192.168.100.2
DNS 168.126.63.1, 168.126.63.2
깜빡하고 IP를 설정하지 않아서 수동으로 셋팅 변경
https://itgameworld.tistory.com/15 를 참고하여 변경했다.
vi /etc/sysconfig/network-scripts/ifcfg-eth(사람마다 뒤는 다름)
Centos7에서 파티션 분할을 자동으로 설치시 LVM으로 설치가 된다.
(LVM : HDD를 묶어서 사용하는 기술)
C:\Users\사용자계정명\Documents\Virtual Machines
기본경로
VM 압축
설치된 VM의 디렉터리를 확인한 후 zip으로 압축 (커서는 home을 선택해둔다)
압축했던 VM 사용하기
압축을 풀고 폴더명을 적절히 변경한 뒤, vm ware에서 open하거나, 폴더 내부의 vm명.vmx 파일을 실행한다.
(player -> file -> open 또는 home에서 open a virtual machine)
(I copied It => mac주소를 변경해주는 과정. (=NIC(Network Interface Card, 랜카드)의 mac주소))
이후 실행한 뒤에 기존 VM과 충돌되지 않도록 ip주소를 변경한다.
삭제 : delete from disk
~ nmtui 명령어로 ip 주소 변경하기 ~
이후 systemctl restart network 해주면 ip a 에 변경된 것을 조회할 수 있다.
편의상 putty로 접속
호스트명host name 변경하기
hostnamectl set-hostname linuxboan1.도메인url
hostnamectl set-hostname linuxboan2.도메인url
구분 가능하도록 호스트명을 변경해둔다.
echo 192.168.100.1 linuxboan1.linuxmaster.net linuxboan1 >> /etc/hosts
echo 192.168.100.12 linuxboan2.linuxmaster.net linuxboan2 >> /etc/hosts
hosts에도 추가
vi 컬러 설정
yum -y install vim alias vi=vim echo alias vi=vim >> .bashrc cat << EOF >> /etc/vimrc set nu " 번호 set ai " 자동 들여쓰기 set ci " C언어 자동 들여ㅓ쓰기 set bg=dark " 백그라운드 set sw=4 " 들여쓰기 내어쓰기 간격 4 set ts=4 " 탭크기 4 set expandtab " 탭을 공백으로 수정 set cursorline " 커서라인 EOF |
--
중간에 dns server를 지정해주지 않아서 yum 명령어 실행이 안되었다.
cat << EOF >> /etc/resolv.conf
nameserver 168.126.63.1
nameserver 168.126.63.2
EOF
미리 선언해둔 vi=vim 명령어 때문에 에러가 나고 있어서 막막하여,
cat을 이용해 nameserver 내용을 밀어넣었더니 에러가 해결되었다.
--
gcc 설치
yum -y install gcc make gdb glibc.i686 glibc-devel.i686 libgcc.i686 libstdc++.i686 glibc glibc-devel libgcc libstdc++
gcc -g -o test1 test.c => 64비트 실행파일
gcc -m32 -g -o test2 test.c => 32비트 실행파일
useradd -g users user1; passwd user1
=> user1 생성
리눅스 polkit 취약점 (버전이 낮은 리눅스로 실습)
- 2021년에 나온 리눅스 취약점으로 CVE-2021-4034
- 일반 유저가 실행해서 관리자 권한을 획득하는 권한 상승 취약점이 존재
vi evil-so.c
vi exploit.c
vi Makefile
소스파일을 그대로 vi에 붙여넣기 하기 전에,
:set noai
:set paste
입력을 한 후 붙여넣기 모드일 때 수행.
(그렇게 해도 맨 앞의 문자열 몇 개가 잘리긴함)
로컬 권한 상승 공격
- 시스템이 로그인한 상태에서 취약점을 공략해 관리자 권한을 얻어낸다
리모드 권한 상승 공격
- 외부에서 취약한 시스템을 공략해 관리자 권한을 얻어낸다
evil-so.c
=> setuid, setgid, setgroups를 0으로 설정한 뒤 /bin/sh execve
exploit.c
=> 새폴더를 만들고 권한을 777로 준뒤 ...
Makefile
=> evil-so.c와 exploit.c를 gcc로 자동으로 컴파일해주는 소스코드.
원격복사(파일 보내기)
scp 파일명1 파일명2 user1@보낼ip주소;
ex scp evil.so exploit user1@192.168.100.100;
Zero day : 취약점이 발견되고, 제조사에서 패치를 발표하기 전까지의 기간
UUID : 범용 고유 식별자. 32개의 16진수로 표현(+ 4개의 -하이픈)
하드디스크의 파티션을 분할하면, 파티션의 UUID가 모두 다르다
blkid로 파티션 UUID 확인가능
* 로컬 권한 상승 취약점 대응방안
1. 파일 삭제
rm -rf 해당폴더
2. vi /etc/fstab 수정
파일시스템 테이블. 어떤 파티션이 어떤 디렉터리에 마운트 될 것인지의 정보 파일
부팅시 이 파일을 읽어서 파티션을 디렉터리에 연결
(디-마-파-옵-덤-파 암기)
Device 마운트포인트 파일시스템파일 옵션 덤프 파일시스템체크순서
UUID=e78b8dff-중략-ff8b36207752 / xfs defaults 0 0
UUID=3026646d-중략-b1847892db10 /boot xfs defaults 0 0
UUID=bb73678b-중략-1cffaba4e396 /home xfs defaults,noexec 0 0
UUID=0ff50f02-중략-58a14df7a015 /tmp xfs defaults 0 0
UUID=5f6c8a3f-중략-0b69c519663b /usr xfs defaults 0 0
UUID=0cce336a-중략-27e26211ea8c /var xfs defaults 0 0
UUID=b5acf817-중략-8a4ab316cb2a swap swap defaults 0 0
* /home 디렉터리의 옵션에 noexec을 추가한다.
* 실행파일을 실행할 수 없도록 하는 옵션
3. mount -o remount /home
다시 마운트를 한다.
4. ./exploit 실행시 거부되는 것 확인
bash: ./exploit: 허가 거부
/tmp 폴더에도 동일하게 noexec 추가 후 마운트 한다.
5. /dev/shm 디렉터리는 일반유저도 파일을 저장/삭제하고 실행할 수 있는 영역이다.
find / -type d -perm -1000 -ls 2> /dev/null
8454 0 drwxrwxrwt 2 root root 40 4월 6 16:00 /dev/mqueue <- 신경쓰지 않아도 됨 8678 0 drwxrwxrwt 4 root root 120 4월 6 17:41 /dev/shm <- 막아야 할 영역 64 4 drwxrwxrwt 11 root root 4096 4월 6 17:35 /tmp <- noexec 설정 했음 /tmp 아래는 다 자동적용 68 0 drwxrwxrwt 2 root root 6 4월 6 14:49 /tmp/.font-unix 2097216 0 drwxrwxrwt 2 root root 6 4월 6 14:49 /tmp/.X11-unix 4214848 0 drwxrwxrwt 2 root root 6 4월 6 14:49 /tmp/.Test-unix 6291520 0 drwxrwxrwt 2 root root 6 4월 6 14:49 /tmp/.XIM-unix 69 0 drwxrwxrwt 2 root root 6 4월 6 14:49 /tmp/.ICE-unix 2097217 0 drwxrwxrwt 2 root root 6 4월 6 14:57 /tmp/systemd-private-56e중략c2wr/tmp 2097218 0 drwxrwxrwt 2 root root 6 4월 6 16:01 /tmp/systemd-private-49e중략Yu94ys/tmp 67 0 drwxrwxrwt 4 root root 164 4월 6 16:40 /var/tmp <- 막아야 할 영역 2097216 0 drwxrwxrwt 2 root root 6 4월 6 14:57 /var/tmp/systemd-private-56중략-k3iwTS/tmp 2097217 0 drwxrwxrwt 2 root root 6 4월 6 16:01 /var/tmp/systemd-private-49e중략-B42YKJ/tmp |
sticky bit설정된 폴더를 검색하여 조치해야 할 영역을 확인
/dev/shm의 경우 램을 디스크처럼 사용하는 램디스크인데,
사용하지 않으므로 umount /dev/shm 으로 해제한다. 권한이 755로 낮아지므로 공격에 방어할 수 있다.
그리고 /etc/rc.d/rc.local 파일에 언마운트 정보(umount /dev/shm)를 설정한다.
6. /var 폴더에도 동일하게 noexec 추가 후 마운트 한다.
mount | grep -E '/home|/var|/tmp'
/dev/sda5 on /tmp type xfs (rw,noexec,relatime,seclabel,attr2,inode64,noquota)
/dev/sda3 on /var type xfs (rw,noexec,relatime,seclabel,attr2,inode64,noquota)
/dev/sda7 on /home type xfs (rw,noexec,relatime,seclabel,attr2,inode64,noquota)
noexec 확인 됨
단, 어떤 애플리케이션의 실행파일이 noexec 추가 한 폴더에 있을 경우를 고려해야 한다
ex) qmail 메일서버는 /var/qmail/bin에 실행파일이 위치한다