본문 바로가기

보안/시스템 보안

Privilege Escalation 실습 및 과제

Privilege Escalation이란?

  • 권한 상승을 의미
  • 공격자가 높은 수준의 권한(관리자 권한)을 얻고자 함. 
  • 시스템이나 네트워크에서 얻고자함. 
  • 공격자가 시스템에 최초로 침입했을 때, 일반 사용자로 들어감. 
  • 시스템 약점, 잘못된 권한 설정된 것, 취약점을 이용해 공격 

 

  •  elevated access
    • 어드민보다 높은 시스템
    • Persistence techniques이랑 겹치는게 좀 있음. 

 

 

Techniques

  • Abuse Elevation Control Mechanism\
  • Access Token Manipulation
  • Account Manipulation
  • Boot or Logon Autostart Execution
  • Boot or Logon Initialization Scripts
  • Create or Modify System Process
  • Domain or Tenant Policy Modification
  • Escape to Host
  • Event Triggered Execution
  • Exploitation for Privilege Escalation
  • Hijack Execution Flow
  • Process Injection
  • Scheduled Task/Job
  • Valid Accounts (흔히 사용) 

 

 

Exploitation for Privilege Escalation

  • 공격자가 소프트웨어 취약점을 이용함. → 권한 상승을 위해
    • 취약점은 거의 존재하기 때문. 
    • 공개되어있느냐, 취약한가의 차이

 

 

관련 과제2

 

과제의 진행 방식은 다음 이미지와 같다. 

 



기본 설정

  • 두 가상 머신을 다운 받아, 공격자와 같은 네트워크에 위치시킨채 동작시킨다.

→ ip 주소를 획득 가능. 






획득할 수 있는 정보 획득하기

1 ) ip 주소 획득

  • 공격자의 ip는 192.168.108.131/24

  • ip주소가 나왔지만 둘 중 어느 것이 cju인지, goal인지 알 수 없다. 



2) ssh 서버가 정말로 작동 중인지 확인

  • nmap 옵션에 대한 설명은 nmap을 치면 알 수 있다.



-sS 열려있는 모든 포트를 탐지한다.
-p 특정 포트를 지정해서 탐지한다. 





  • 포트 확인 

  • 22번 포트를 제외하고는 열려있는 포트가 없어 보인다. 






3 ) 상대 시스템의 정보를 알아내기

  • 혹시 유용한 정보가 될 수도 있으니 알아본다. 



  • nc 이용

 

  • netcat은 TCP 또는 UDP 프로토콜을 사용하여 네트워크 연결을 통해 데이터를 읽고 쓰는 명령줄 유틸리티
  • 네트워크 연결을 디버그 및 모니터링, 열린 포트 검사.. 등의 작업 가능. 



  • telnet 이용

  • 132번은 ssh 9.7, 133번은 ssh 8.8버전을 사용함을 알 수 있다. 
  • 각각의 버전에서 발견된 취약점이 있을 수도 있으니 검색해본다. 

 

  • openSsh 8.8이상에서 발견된 취약점이라고 한다. 

https://strobes.co/blog/openssh-regresshion-cve-2024-6387-a-blast-from-the-past-with-critical-repercussions/ 

  • 똑같이 실행시켜본다. 

 

  • 하지만 취약하지 않는다고 나온다.. 취약하다고 했는데.. 
  • 이 취약점은 이용할 수 없을 것 같다. 







4 ) mac주소, 사용 운영체제 획득

  • 유용한 정보가 될 수도 있으니 획득한다. 





cju로의 침투 시도

  • 어느것이 cju의 ip인지 모르기 때문에 일단 시도해본다. 

 

i. 사회 공학적 방법 이용

평소 교수님이 많이 사용하시는 비밀번호를 생각해보고 시도해본다. 

  • ex) 1111, wooam.. 

  • 접속 성공이다. 이래서 아는 사람을 조심해야하나보다. 
  • 일반 사용자로 접속이 성공했다. 

 

ii. brute force 기법 이용

  • 칼리에 있는 기본 비밀번호 리스트 경로 : /usr/share/wordlists/rockyou.txt.gz
  • sudo hydra -l cju -P /usr/share/wordlists/rockyou.txt ssh://192.168.108.133

[메시지 해석]

주요 메시지와 해석은 다음과 같습니다:
  • Hydra v9.5: 사용 중인 Hydra의 버전이 9.5입니다. Hydra는 패스워드 크래킹 도구로, 주로 강제 암호 추측(브루트포스 공격)에 사용됩니다.
  • [WARNING]: 많은 SSH 설정이 병렬 작업 수를 제한하므로 작업(task) 수를 줄이는 것이 좋다고 경고하고 있습니다. -t 4 옵션을 사용하여 4개의 작업으로 줄이는 것을 추천합니다.
  • [Restorefile]: 이전 세션이 중단되었으며, 이를 덮어쓰지 않기 위해 10초 동안 대기하고 있습니다. (이 대기를 건너뛰려면 -I 옵션을 사용할 수 있습니다.)
  • [DATA]: 192.168.108.133 서버의 SSH(22번 포트)에 대해 최대 16개의 작업을 동시에 실행 중이며, 전체 14,344,399번의 로그인 시도가 필요합니다.
  • [STATUS]: 매 분당 시도한 로그인 횟수를 보여주고 있습니다. 예를 들어:
이 결과는 공격이 매우 느리게 진행되고 있으며, 만약 SSH 서버에 강력한 보안 설정이 되어 있을 경우 시도가 계속 실패할 가능성이 큽니다.

  • 너무 오래걸려서 진짜 비밀번호만 들어있는 리스트 만들어서 brute force 실행시켜줬다. 

⇒ cju의 비밀번호를 획득했으니, 로그인을 시도해본다. 

 

 cju 시스템 탐색하기

  • 기본적인 시스템을 탐색해준다. 
  • 운영버전에 따른 취약점이 있을지도 모르니, 탐색해준다. 



[자세한 운영체제 정보]

  • uname -a     or      cat /etc/*release*==> 찾아보니 해당 커널버전에서 발견된 보안 이슈가 있었다. (CVE-2024-1086) 

 

[취약점 이용 CVE-2024-1086]

  • 권한 상승 방식
수직적 권한 상승 일반 → root
수평적 권한 상승 일반 → 일반
  • nf_tables 구성 요소에서 로컬 권한 상승을 달성하는 데 악용될 수 있는 사용 후 무료 취약점이 발견.
  •  nft_verdict_init() 함수는 후크 평결 내에서 양수 값을 드롭 오류로 허용하여, NF_DROP이 NF_ACCEPT를 모방하는 드롭 오류로 발행될 때 nf_hook_slow() 함수가 더블 프리 취약점을 트리거하도록 유도.
  • poc코드가 공개되어 있다고 한다. https://github.com/Notselwyn/CVE-2024-1086 



자세한 방법( Privilege Escalation)

1. build

  • 칼리에서 해당 파일을 다운 받아준다. (이때 칼리는 인터넷 접속이 되어야한다. ) 
  1. git clone https://github.com/Notselwyn/CVE-2024-1086
  2. cd CVE-2024-1086
  3. make

 

2. 파일 전송

  • cju 인터넷이 안되기 때문에 ftp와 같은 원격 접속 방법으로 파일을 전송해줘야 한다. 

 

sudo scp -r ~/CVE-2024-1086 cju@192.168.108.133:/home/cju
  • ssh 이용해서 파일을 전송하는 방법이다. 
  • scp (Secure Copy Protocol) 이용함. 

 

  • 명령어를 실행시킨 후, 파일이 잘 전송되었나 확인한다. 



3. 실행 (./exploit) 

  • 해당 파일을 실행시켜주니 무언가 진행이 되었다. PoC코드를 공유한 깃허브 블로그처럼 확인을 해주었다. 

 

  • root가 되었음을 알 수 있다. 





(+) 일반 사용자를 생성하고 root 권한 주기. 

  • 터미널 창을 실수로 닫거나, 재시작을 해야하는 경우 다시 위와 같은 과정을 반복해야한다. 귀찮으므로 root권한을 가진 상태에서 일반 사용자를 생성한 후 root 권한으로 만들어주었다. 











cju 사용자 탐색

  • 도움이 될 만한 정보가 있을지도 모르니 탐색해준다. 

 

[사용자 디렉터리 탐색]

  • 이러한 정보를 볼 수 있었다. 
  • ~/.ash_history는 내가 접속한 후 사용한 명령어가 들어있는 파일이다. 별 도움이 되지 않았다. 





[사용자 계정 정보]

  • cju의 정보



  • 다른 계정 정보

→ 혹시 다른 계정에 로그인할 수 있지 않을까하고 시도해봤지만, 어림도 없다. 




[SUID 바이너리 찾기]

  • 잘못된 권한 설정 파일을 찾아본다. 
  • find / -type f -perm -4000 -print 2>/dev/null
  • 취약점이 있다면 권한 상승을 노릴 수 있다. 

  • /bin/bbsuid라는 파일 권한이 이상하다고 한다. 이 파일이 취약한 파일일 수도 있으니, 파일에대해 탐색해본다. 



[/bin/bbsuid] 파일 탐색

  • 뭐하는 파일인지 모르겠다. alpine 리눅스에 자동으로 생성되는 파일 같다. 





file /bin/bbsuid

  • 어떤 파일인지 탐색

→ 안 나온다. 




ldd /bin/bbsuid

  • 해당 파일이 사용하는 라이브러리를 확인.
  • /lib/ld-musl-x86_64.so.1 를 사용중이다. 

  • 라이브러리 문제는 없어보인다. 




strings /bin/bbsuid

  • 실행 가능한 바이너리 내의 문자 데이터를 검색하여 중요한 힌트를 찾을 수 있다. 

→ 안된다. 




/bin/bbusid --help  or 실행시키기

  • 실제로 실행했을 때 출력이 어떻게 나오는지도 확인해 볼 수 있습니다. 바이너리를 실행할 때 기본적인 정보나 도움말이 나올 수 있다. 

→ 해당 명령어를 실행할 때 해당 바이너리가 필요한 심볼릭 링크를 설치해야 한다고 한다. 한번 해보자. 

 

--> 하지만 어림도 없다. 안된다. 

 

==> 해당 파일은 이용하기 어려워보인다.






Root로서 정보 탐색

  • Lateral Movement (측면 이동)
    • 공격자가 너의 환경으로 움직이려고 함. 
    •  Remote Services

 

[ssh 로그 탐색해보기]

  • 혹시 goal과 원격접속한 기록이 남아있을지도 모른다. 탐색해보자. 

  • 아무것도 볼 수 없다. 실패!







[ root  디렉토리의 숨겨진 파일 찾기]

  • ls -a를 해보니 숨겨진 파일이 나왔다. 
  • .ash_history는 명령어를 사용한 흔적이다.

 

  • 내용은 이러하다. 
  • goal머신의 계정명을 알아낸 것 같다. 




  • 혹시 비밀번호가 걸려있지 않을지도 모른다. 로그인해보자. 

→ 안된다! 비밀번호가 역시나 걸려있다. 



[ssh 키를 통한 로그인]

  • 찾아보니 비밀번호를 모르더라도, 키를 알 수 있다면 로그인할 수 있다고 한다. 시도해보자.  

 

  • 다음과 같은 순서로 생성할 수 있다고 한다. 
  • ssh키는 /root/.ssh/에 저장되어 있다. 



i. 키 생성

  • 생성했다. 




ii. 상대에게 복사, 배포

[방법]

  • ssh-copy-id proxynova@192.168.108.132
  • scp $HOME/.ssh/id_rsa.pub user@remote.server.com:id_rsa.pub

 

  • 잘 복사가 되었다.  하지만, 그 후 작업을 계속하려면 상대 계정으로 로그인을 해야 진행되는 것 같다. 
  • 설마.. 새롭게 생성하지 않고 기존의 것을 이용하면 되었던 것일까? 




여기까지 알아냈지만, 이 이상을 알지 못하겠다.