본문 바로가기
정보보안

정보보안1_2차시

by IT매니절 2024. 4. 7.

1차시 때

/etc/rc.d/rc.local에 /dev/shm/ 언마운트 등록을 해도 재부팅하면 다시 마운트되는 현상 발생
=> 차선책으로 vi /etc/fstab

tmpfs                                     /dev/shm                tmpfs   defaults,noexec  0  0

noexec 실행금지 옵션을 넣어주었다. (reboot 후 확인)

( + 검색을 통해 systemctl status rc-local.service 가 inactive(dead)상태여서, 재부팅시에 rc.loacl을 인식하지 못한 문제인 것으로 판단.

 

https://itcontrol.tistory.com/63 참고.

서비스를 활성화 시킨 뒤에 reboot 했더니 mount가 해제되어, 권한에 sticky bit가 제거되어 있다. )

 

=> 사용자가 저장할 수 있는 공간(파티션)에 noexec 옵션을 주어 실행파일을 막아야 한다

(사용자 홈 디렉토리, 공유 디렉터리 /tmp, 임시 디렉터리 /var/tmp 등 sticky bit가 설정된 폴더들...)

 

하드디스크 파티션 구조

[부트 - 슈퍼 - 아 이 노 드 -    데  이  터  블  럭    ]

 블럭   블럭        블 럭        

 

부트 블럭 : 파일 시스템의 가장 첫 번째 블록.
섹터 0에 위치. 작인 프로그램 grub2가 들어있음

 

슈퍼블럭 : 메타데이터. 파일 시스템의 전반적인 구조 및 상태에 대한 정보.
파일 시스템 크기, 마운트 상태 등.

 

아이노드 블럭 : 각 파일이나 디렉터리의 메타데이터
파일의 권한, 소유자, 그룹, 파일의 데이터 블록에 대한 포인터 등의 정보

 

데이터 블럭 : 파일의 실제 데이터가 저장됨

 

dd : 파일을 생성하는 명령어

/dev/zero : 0을 의미하는 특수 장치 파일 (문자장치 파일, 문자단위로 데이터를 읽음(ex 프린터, 터미널) (c))

 

블럭장치파일 : disk, usb 등... 블럭단위로 읽는 장치 (b)

소켓파일 : 통신할 때 사용 (s)

dd if=/dev/zero of=a.txt bs=1024 count=1
=> /dev/zero를 input하고, a.txt를 output한다. 크기는 1024 count는 횟수

응용 복사 (동일하게 복사하여 output으로 내보냄)

dd if=/etc/passwd of=passwd.txt

 

od : 내용을 16진수, 8진수, 또는 다른 형식으로 나타낸다

od -N 440 (출력할 바이트를 440으로 지정)

 

리눅스 MBR 삭제하기
MBR : Master Boot Record. 운영체제로 점프할 수 있는 작인 프로그램이 있음.

/dev/sda : 첫 번째 하드디스크의 첫 번째 파티션. 이 폴더의 내용을 삭제하면? MBR을 삭제하는 것이나 마찬가지이다.

dd if=/dev/zero of=/dev/sda bs=440 count=1

=> 덮어쓴 이후 reboot 하면 제대로 부팅되지 않는 것을 확인할 수 있다.

Troublechooting > Rescue a Centos system
continue
chroot 체인지 루트. 루트 디렉터리를 mnt/sysimage로 변경하라는 뜻

 

# grub2-install /dev/sda

=> grub2 설치 후 vm ware에서 강제부팅하면 정상적으로 뜬다.

 

 

libc-2.17.so파일을 삭제해보기

/usr/lib64/libc.so.6 -> libc-2.17.so
=>C프로그램이 실행될 때 필요한 기본적인 기능과 함수 제공
C 표준 라이브러리의 구현체 중 하나이며 삭제되면 외부명령어가 실행되지않고 리눅스가 부팅되지 않는다

정적 라이브러리
: 소스 코드를 컴파일하여 바이너리 형태돌 된 객체 파일 라이브러리. 각 object에 명령어가 중복되는 낭비가 있었음.
 (리눅스에서 .a 확장자이고 윈도우에서는 .lib 확장자이다)

공유 라이브러리
: 정적 라이브러리에서 단점을 보완해 발전된 형식.

 프로그램이 시작될 때 적재되는 라이브러리. 실행파일인 ELF 형식.
 (리눅스에서 .so 이고 윈도우는 .dll)

동적 (적재) 라이브러리 : 프로그램이 시작될 때가 아닌 필요할 때마다 적재시키는 라이브러리. 

공유 라이브러리를 만드는 것과 동일하게 생성하지만, 시작/링크시에 적재되지 않음.
동적 라이브러리를 컴파일 하기 위해서는 -ldl 옵션을 주고 컴파일 해야 한다.
또 소스 파일에 반드시 dlfcn.h 헤더파일을 포함한다.

(리눅스에서 .so 이고 윈도우는 .dll)

 

ldd /bin/ls

linux-vdso.so.1 =>  (0x00007ffe461f7000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff25ae08000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007ff25ac03000)
        libacl.so.1 => /lib64/libacl.so.1 (0x00007ff25a9fa000)
        libc.so.6 => /lib64/libc.so.6 (0x00007ff25a62c000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff25a3ca000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007ff25a1c6000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff25b02f000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007ff259fc1000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff259da5000)

=> 중요 모듈들이 심볼릭링크 되어 있다.

 

ldd /bin/dd

linux-vdso.so.1 =>  (0x00007ffe4013a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f33a0e4d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f33a121b000)

 

ldd 명령어는

프로그램이 실행하는 동안 필요한 공유 라이브러리 (또는 동적 라이브러리)를 표시함

 

rm -f /lib64/libc-2.17.so

=> 삭제후 모든 외부 명령어가 실행 불가능해짐 (내부 명령어는 됨 ls 등)

 

이 때 그냥 강제부팅시, grub2가 손상되지 않았기 때문에 하드디스크로 부팅하게됨

부팅시에 F2 키를 눌러 CMOS 화면으로 들어가야 한다

 

 

CD-ROM Drive에서 +키를 이용해 Hard Drive보다 위로 올려주고 빠져나온다

 

 

Troublechooting > Rescue a Centos system > Contunue > chroot mnt/sysimage

/usr/lib64/libc-2.17.so : CD-ROM에서 올라온 새 파일

/mnt/sysimage/usr/lib64/libc-2.17.so : 원래의 하드디스크 파일인데, 삭제해서 Cannot access 에러 뜸

 

해결을 위해서,

cp /usr/lib64/libc-2.17.so /mnt/sysimage/usr/lib64/

파일을 복사하여 하드디스크 위치에 넣어주고 다시 reboot 하여 CMOS 화면으로 접속한다.

이 때는 Hard Drive의 우선순위를 위로 올려주고 부팅하면, 정상적인 로그인 화면이 나타난다.

 

 

 

리눅스 싱글모드를 이용한 root 비밀번호 초기화하기

 

리눅스 싱글모드?
- 시스템을 로그인없이 단독으로 사용하는 모드 (타 사용자 없음)

사용 예) 부팅중에 문제가 발생하여 정상적으로 부팅되지 않을 때, 점검 또는 유지보수를 위해 시스템을 안전한 상태로 전환할 때, root 비밀번호를 모를 때

 

Centos7 기준으로 실습)

 

e 키를 이용해 편집모드로 들어와서

rhgb quiet 자리에 init=/bin/bash 를 입력하고, 단축키 Ctrl + X 를 눌러 부팅한다.

 

rhgb는 Red Hat Graphical Boot의 약자로 리눅스 배포판 중 하나인 Red Hat Enterprise Linux에서 사용되는 옵션.
그래픽 드라이버와 관련된 문제가 발생했을 경우 사용자가 문제를 파악하고 디버깅할 수 있도록 도움을 준다

quiet는 부팅중 발생하는 메시지를 최소화

 

부팅이 완료되면 root 권한의 셸 bash-4.2#이 활성화된다

 

 

mount

이 때는 파일시스템이 read only (ro)로 되어 있으므로 read write(rw)로 바꾸어주어야한다

 

mount -o remount,rw /

다시 확인해보면 rw로 바뀌었다

passwd로 비밀번호를 바꾸어준다. 

 

touch /.autorelabel

=> SELinux를 사용하는 시스템에서 파일 시스템 레이블을 재구성하도록 지시하는 명령어

(파일 및 프로세스 액세스 권한을 제어한다. 파일 시스템 레이블에 보안 컨텍스트가 있음.

일반적으로 시스템이 부팅될 때 이 레이블이 설정됨.

/.autorelabel 파일을 생성하면 시스템이 다음에 부팅될 때 SELinux 레이블을 자동으로 다시 설정

파일 시스템이 변경/손상되었을 때 일관성을 복구할 때 사용할 수 있다 )

 

exec /sbin/init

=> 재부팅

 

 

리눅스에서 싱글모드로 진입하기 위한 부분을 막는 방법

1. CMOS Setup부분에 비밀번호를 설정

- HDD의 부팅 순서가 우선이어야 함

- 공격자가 부팅용 USB로 CMOS-Setup을 수정하면 USB로 먼저 부팅되어 리눅스 시스템을 수정할 수 있다

- 이 방법은 비밀번호를 잊어버리면 HDD를 분리해서 다른 서버의 두 번째 HDD로 인식시켜 수정하는 방법뿐

2. grub2의 비밀번호를 설정한다

- 부팅시 관리자가 설정한 비밀번호를 모르면 싱글모드에 진입할 수 없다.

 

grub2의 비밀번호를 설정하기

 

which grub2-mkpasswd-pbkdf2
=> which 명령어로 위치 확인

 

grub2-mkpasswd-pbkdf2 명령어를 사용하여, 비밀번호로 쓸 값의 암호화값을 복사한다.

 

PDKDF2는
비밀번호 기반의 키 파생 함수. 주어진 비밀번호와 솔트를 사용해 안전한 해시를 사용함

(해시 : 일방향 암호화. 복호화가 안됨)

 

Grub2 설정 파일 수정하기

vi /etc/grub.d/40_custom

=> 부트로더의 부트 메뉴에 사용자 정의 항목을 추가하기 위한 스크립트 파일

 

 

복사한 명령어는 위와 같은 형식으로 적어놓는다

set superusers="root"

password_pdkdf2 root [복사한암호화값]

 

grub2-mkconfig -o /boot/grub2/grub.cfg
=> grub의 설정 파일을 생성하고 업데이트하는 명령어

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

정보보안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 1차시  (0) 2024.04.06