NOTICE


 UAC 우회 기법에 대해 살펴보도록 하겠습니다. Vista 이후의 Windows는 잘못된 작업으로 인한 문제 발생과 악성코드가 사용자 모르게 마음대로 설치되는 것을 방지하기 위해 사용자 계정 컨트롤(User Account Contorl)을 사용하기 시작했습니다. 사용자 계정 컨트롤에 대한 자세한 설명은 아래 링크를 참고하시기 바랍니다.


 [개념 이해] 사용자 계정 컨트롤(User Account Contorl)http://securityfactory.tistory.com/249


 악성코드는 사용자 계정 컨트롤(User Account Contorl)로 인해 자신의 동작의 방해를 받게 되자 UAC 우회 기법을 사용하기 시작했습니다.



1. UAC 우회 기법_01


 기존 UAC 우회 기법입니다. 동작과정을 간략하게 살펴보면 다음과 같습니다.


1. UAC.tmp(.DLL)를 생성한다.

2. explorer.exe에 Code Injection을 시도한다. 이로 인해 explorer.exe는 "C:\Windows\System32\sysprep" 경로   에 위치한 cryptbase.dll 파일을 UAC.tmp로 바꾼다.

3. 악성코드가 "C:\Windows\System32\sysprep” 경로에 위치한 sysprep.exe를 실행하고 sysprep.exe에 악성       cryptbase.dll를 로드시킨다. 이때 악성코드는 종료된다.

4. cryptbase.dll은 악성코드를 관리자 권한으로 다시 실행시킨다.


 이 기술은 다음과 같은 상황에서는 UAC 경고창이 뜨지 않은 채 관리자 권한으로 승격이 가능하다는 점을 이용했습니다.


 - explorer.exe와 같은 프로그램(Windows Publisher에 의해 디지털 서명이 된 프로그램)은 관리자 권한이 필요한    작업(“C:\Windows\System32\sysprep” 경로에 DLL 이동)을 UAC 경고 없이 실행 가능하다.

 - sysprep.exe와 같이 자동 권한 상승 프로그램은 실행될 때 UAC 경고 없이 관리자 권한으로 자동 상승된다.

 - 관리자 권한으로 동작하는 프로세스에 로드된 .dll은 관리자 권한을 가진다.


 UAC 우회 기법에 대한 소스 코드 정보는 아래 링크를 참고하시기 바랍니다.




2. UAC 우회 기법_02


 최근 사용되는 UAC 우회 기법은 응용 프로그램 호환성 데이터베이스를 가진다는 특징이 있습니다. 응용 프로그램 호환성 데이터베이스는 호환성 문제가 있는 응용 프로그램을 실행할 때 규칙을 설정하는 파일로 확장명은 .sdb입니다. 악성코드는 이 메커니즘을 사용해서 UAC 문제를 해결 합니다.


1. 악성코드는 “C:\Users\ADMINI~1\AppData\LocalLow” 경로에 호환성 데이터 베이스(com.%s.sdb)와 배치 파   일(red.%s.bat)을 만든다.

2. 호환성 데이터베이스 설치 명령을 사용해 com.%s.sdb를 설치 한다.

  "%windir%\system32\sdbinst.exe" /q "C:\Users\ADMINI~1\AppData\LocalLow\com.Administrator.sdb"

3. 설치된 응용 프로그램 호환성 데이터베이스(com.%s.sdb)의 설정에 따라 iscsicli.exe가 배치 파일(red.%s.bat)을   관리자 권한으로 실행 한다.

4. red.%s.bat가 악성코드를 관리자 권한으로 다시 실행한다.


이 기술은 다음과 같이 Windows 7의 제원을 악용하여 UAC 문제를 해결합니다.


- sdbinst.exe와 iscsicli.exe 같은 자동 승격 프로그램은 프로그램 시작 시 UAC 경고 표시없이 관리자 권한으로 자   동 실행된다.

- sdbinst 명령으로 자동 승격과 같은 변경이 가능하다.


 실제로 설치되는 com.%s.sdb를 살펴보면 iscsicli.exe 실행 시 iscsicle.exe가 red.%s.bat를 실행하도록 지정된 데이터베이스임을 알 수 있습니다.



 관리자 권한으로 실행되는 red.%s.bat은 악성코드를 다시 실행시킵니다.



 이후 악성코드는 설치된 응용 프로그램 호환성 데이터베이스를 제거하고 흔적을 지웁니다. UAC 우회 기법_02에 대한 소스 코드 정보는 아래 링크를 참고하시면 됩니다.


[Source Code] UAC 우회 기법 (UACbypass): http://securityfactory.tistory.com/254


 이상으로 '[동작 과정] UAC 우회 기법'에 대한 포스팅을 마치도록 하겠습니다.


  1. no picture sapphire247 2015.05.11 15:19

    글잘보고갑니다. 제가 궁금한게있는데 제가 로컬컴퓨터에서 테스트하려고 UAC우회는아니고 레지스트리를 이용해
    UAC자체를 끄려고했는데 안꺼진다는건 레지스트리만으로는 부족한건가요 ? 트레이말풍선이 뜨길래 재부팅해야한다길래 explorer.exe프로세스를 종료했다 다시실행시켜보기도하고 재부팅도해봤는데 꺼지지가 않네요

    • no picture BlogIcon 이슝 itseeyou 2015.05.11 16:01 신고

      이상하네요. 제가 예전에 테스트 했을 땐 꺼졌던 걸로 기억하거든요. 혹시 코드로 작성하신건가요??

    • no picture sapphire247 2015.05.13 00:23

      네 윈도우 API함수 썼습니다.

      RegCreateKeyEx함수로 키의 핸들값을 얻은 다음
      RegSetValueEx함수로 값 수정했고 확인도해봤는데 이상하네요 ..
      여기서 제가 함수를 잘못썼나요 ..
      혹시나해서 system함수로 아에 프롬프트 명령어를 쳐도 확인박스가 뜨네요 참 희한하네요 ㅎㅎㅎ

  2. no picture 1111 2015.06.20 20:33

    위에 분 코드가 잘못된게 아니라 레지스트리 수정은 당연히 uac에서 막힐거에요.
    관리자 권한 아니면 아예 접근 못해요. 유저 모르게 레지 등 시스템 파일 등의 임의적인 수정, 변조,
    그런 걸 막으려는게 uac의 출범 목적이에요.

    프로그램 실행전에 저런 해킹기법을 쓰거나(저런 알려진 기법은 결국 윈도우 패치로 막히겠죠)
    shellexecute(runas 인수)나 manifest 파일을 통해 프로그램 실행시에 사용자에게 직접 권한을 요청을 물어서 관리자 권한으로 실행해야 되요.

  3. no picture 나그네 2015.11.25 15:05

    좋은 정보 잘 보고 갑니다 감사합니다