본문 바로가기
정보보안

정보보안1 1차시

by IT매니절 2024. 4. 6.

커리큘럼

정보보안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를 묶어서 사용하는 기술)

df 파티션쪼개지않은것(자동) / 파티션을쪼갠것(수동)

 

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에 실행파일이 위치한다

 

 

'정보보안' 카테고리의 다른 글

정보보안1 6차  (0) 2024.04.21
정보보안1 5차시  (0) 2024.04.20
정보보안1 4차시  (0) 2024.04.14
정보보안1 3차시  (0) 2024.04.13
정보보안1_2차시  (0) 2024.04.07