Post

시스템 보안 실습 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으로 원본 찾기

  • /usr/share/wordlists 폴더의 리스트 사용하여 hashcat 실행

- 주어진 hash 값 복원하기

  • 해시값 :
    1
    
    fda4f8e17642f7435c6a63ff280223141efb5b38998d93b39ba0978e2fe6c14d
    
  1. 해시값 길이로 사용된 알고리즘 유추
  2. 64자리 16진수로 되어있으므로 sha-256일 것임
  3. hashcat으로 sha-256 옵션으로 공격 실행

crunch 사용

RainbowCrack

  • 생성한 테이블을 가지고 크래킹

- DB 사이트


시나리오

  1. 취약한 웹사이트 접속
  2. 웹사이트 소스를 확인해서 해시 값 추출
  3. 사용할 만한 단어를 조합하여 공격
  4. 공격하여 얻은 원본으로 로그인 시도