시스템 보안 실습 1
리눅스의 UID & GID
passwd 파일 확인
- /etc/passwd 에서 유저 목록 및 아이디 확인 가능
- 0번 아이디는 루트 권한이므로 주의 필요
User 추가
- SetUID
- UID 설정 실습
setuid_test.c 소스코드
1 2 3 4 5 6 7
#include <stdio.h> #include <unistd.h> int main() { printf("실행 사용자 UID: %d\n", getuid()); printf("실행 사용자의 유효 UID: %d\n", geteuid()); return 0; }
- UID 설정 전 : 실행한 유저의 유효 아이디 출력
UID 설정 후 : 실행한 유저의 유효 아이디가 루트 권한 아이디로 변경됨
- getuid: 실제 사용자 ID(Real User ID)를 반환하며 이 ID는 사용자가 로그인할 때 할당된 ID로, 사용자의 실제 신분을 나타냄
- geteuid: 유효 사용자 ID(Effective User ID)를 반환하여 이 ID는 현재 프로세스의 권한을 나타내고, 이 프로세스가 어떤 권한으로 동작하는지를 결정함. 주로 setuid 프로그램에서 사용됨
- SetGID
- GID 설정 실습
setgid_test.c 소스코드
1 2 3 4 5 6 7 8
#include <stdio.h> #include <unistd.h> int main() { printf("실행 사용자 GID: %d\n", getgid()); printf("실행 사용자의 유효 GID: %d\n", getegid()); return 0; }
- GID 설정 전 : 실행한 그룹의 유효 아이디 출력
- GID 설정 후 : 실행한 그룹의 유효 아이디가 루트 권한 아이디로 변경됨
- SetUID & SetGID로 루트 권한 획득
- setroot_test.c 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
setuid(0); // root 권한 설정
setgid(0); // root 그룹 설정
execl("/bin/bash", "bash", NULL);
perror("execl failed");
return 1;
}
- SetUID & SetGID 설정된 파일 확인
- 주기적으로 검사하여 잘못된 권한이 있는지 확인하거나 자동화 가능
hashcat 실습
- 해쉬 값 생성
- 생성한 해시 hashcat으로 원본 찾기
- 주어진 hash 값 복원하기
- 해시값 :
1
fda4f8e17642f7435c6a63ff280223141efb5b38998d93b39ba0978e2fe6c14d
- 해시값 길이로 사용된 알고리즘 유추
- 64자리 16진수로 되어있으므로 sha-256일 것임
- hashcat으로 sha-256 옵션으로 공격 실행
crunch 사용
RainbowCrack
- DB 사이트
- CrackStation
- SHA256 Online Tool
- http://project-rainbowcrack.com/table.htm
시나리오
- 취약한 웹사이트 접속
- 웹사이트 소스를 확인해서 해시 값 추출
- 사용할 만한 단어를 조합하여 공격
- 공격하여 얻은 원본으로 로그인 시도