2010.09.29 21:17 System

이번에는 UAC가 적용되는 조건 이나 사례를 알아보도록 하겠습니다

자기가 UAC를 걸지도 않았는데 방패 모양이 박혀서 UAC 를 요구 하는 경우나

분명 방패 모양도 없는데 실행시켜보니 UAC를 요구하는 그런 황당한 일을 겪어보셨을 겁니다

그런 고로 이번 포스팅의 목표는 UAC입니다

UAC가 걸린 파일들은 다음과 같은 분류로 나누어지게 됩니다


1. Installer

2. Manifest

3. Application Compatibility Database

4. 프로그램 내부 코드에 의해 


[+] Installer

Wise, Install Shield, NSIS 등의 전용 Installer 등은 기본적으로 UAC를 넣어주도록 설정 되어 있습니다

이런 실제 Installer 이외에 문제가 될 만한 특이점이 하나 있는데요

컴파일 된 실제 실행 파일이 바로 그 주인공입니다

Visual 6를 기준으로 컴파일 된 실행 파일들은

Install, Update, Setup 이라는 문자열이 파일명, Descriptor , 등등 프로그램 정보에 해당하는 항목에 있을 경우 

방패를 달게 됩니다

<그림1. 파일명에 Update라는 문자열이 들어가는 것만으로도 UAC가 걸린 모습>

Visual Studio 2008 의 경우는 6와 조건은 같지만 

UAC 대신에 호환성 관리자가 실행 되어 이 파일이 정상적으로 설치 되었는가를 물어보게 됩니다

<그림2. Visual Studio 2008 에서 컴파일한 실행파일명에 해당 문자열을 넣고 실행한 모습>

그런 고로 이런 파일명이나 프로그램 정보등에 Install, Update, Setup 등의 문자열이 들어가는 것을 주의해야 합니다

[+] Manifest

두번째는 Manifest 입니다

가장 보편적으로 UAC를 삽입하는 방법이죠

이는 실행파일등의 Resource에서 Configuration Files 정보에서 확인합니다



<그림3. UAC가 걸려있는 파일의 실제 Manifest 적용 정보>

이에 해당하는 level의 항목은 다음과 같습니다

<그림4. Manifest 설정 파일 내의 항목에 따른 요구 권한>

requestedExecution level 옆의 uiAccess 같은 경우는 기본으로 False가 설정되어 있는데요

이는 사용자 인터페이스 권한 격리 [ UIPI ]를 사용한다는 의미입니다

이게 무슨 소린고 하니, 낮은 신뢰 등급을 가진 프로세스가 높은 신뢰등급을 가진 프로세스에 메세지를 보내는 것은 제한 한다는 것이죠

True로 설정되어 있다면 이를 해제 합니다




[+] Application Compatibility Database

Windows 에서는 기존에 호환성에 문제가 있따고 밝혀진 기존의 파일에 대한 DB가 존재합니다

그 DB에는 더이상 업데이트 되지 않는데 적절한 수정이 없으면 현재 OS에서는 정상동작하지 않는, 그런 프로그램들에 대한 정보가 있습니다
이에 대한 정보는 프로그램 실행 전에 체크 되며

DB에 있는 파일들은 설정된 지시를 따르게 됩니다

이러한 DB를 보려면 Application Compatibility Manager라는 관리툴을 깔아야 하며

http://www.microsoft.com/downloads/en/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&displaylang=en

에서 다운 받을 수 있습니다 :D

만약 호환성 문제가 되어있되, 지시가 적히지 않은 프로그램의 경우가 있다면, 다음과 같은 메세지를 보이게 됩니다


<그림5. 2.0 버전의 Gom Player에 대한 호환성 DB가 존재하여 프로그램 호환성 관리자 창이 뜬 모습>

이 DB에서 만약 특정 프로그램은 관리자 권한으로 실행해야 한다고 지시가 있으면

그렇게 행하게 됩니다

예를 들면 Filemon이 있죠

<그림6. DB에 관리자로 실행되게 끔 되어 있는 Filemon>

Filemon은 현재 Process Monitor 로 Regimon 과 함께 통합이 되어 더이상 업데이트를 하지 않는데

관리자 권한이 아니면 정상동작하지 않는 고로 호환성 DB에는 관리자 권한으로 실행되라고 하는 지시를 발견할 수 있습니다




[+] 프로그램 내부 코드에 의해

이 경우가 대부분의 방패 모양은 없는데 UAC가 걸리는 그런 상황입니다

특정 프로그램들은 OS Version 에 따라 다른 코드가 실행되곤 하는데 Windows Vista 이상부터는 권한을 상승시켜 재실행 하는 경우를

종종 볼 수 있습니다

그냥 프로그램 권한을 상승시키면 되지 재 실행 할 필요는 없지 않느냐 하는 질문이 있을 수 있는데요

프로그램은 재 실행 되지 않고서 , 권한만 상승 시킬 수는 없습니다

이 점 유의해두시면 좋겠네요 

간혹, 특정 버튼에만 UAC를 걸어 프로그램을 실행 시키되, 보이지 않게 하는 경우도 있다는 걸 알아두시면 좋겠죠?

작업 관리자가 대표적인 경우 입니다


<그림7. 특정 버튼, 동작에만 권한 상승이 걸려있는 모습>

 
이상 UAC가 적용되는 조건에 대해서 써봤습니다

생각보다 복잡하네요

특히 마지막 경우  방패 모양이 실행 파일에 찍히지 않아, 실수하기 쉬운 경우가 되겠죠?
Posted by LinkC

2010.09.29 13:15 Etc../잡담

얼마 전에 기존과는 다른 Malware가 등장했습니다

Stuxnet 이 바로 그 주인공인데요

자세한 설명은 아래 사설을 보시면 됩니다


요약을 하자면 , 기존의 Malware 가 DDOS 등으로 사이트를 마비 시키거나

정보를 빼가는 정도를 넘어 이제 실제 사회 인프라를 공격하고 있다는 내용입니다

이란의 원전 관리 시스템이 공격받았다는 거죠

뭐랄까, ' 미래는 사이버 전쟁이 될 것이다 ' 라는 말이 확실히 와닿는 사건이 아닐 수 없군요

정말 영화에서나 보던 일입니다. 



<그림1. 그런데 그것이 실제로 일어났습니다.>

Beist 님께서 이 기술에 대한 링크를 주셔서 한번 살펴 봤습니다


위 사이트에서 퍼온 그림으로 요약해보자면 .. 

 
<그림2. 공격에 쓰인 기법>


그러니까 실제 dll 대신 감염된 Fake dll 을 넣고 기기와 소프트웨어 간의 정보를 가로챈다는 것이 요지입니다

루트킷 코드를 넣는 것도 잊지 않고 착실하게 넣어주었습니다

공격에 쓰였던 것은 아닌거 같습니다만, Stuxnet 류의 악성코드가 정식 디지털 서명을 무장했다는 것이 이슈가 되기도 했습니다


악성코드들이 점점 더 교묘해지고 악날해져가고 있네요

만든 사람도 정말 대단하죠?

Cyber War에 대한 걱정보다도 만든이에 대한 존경심이 들곤 합니다

물론 윤리적인 측면에서 보면 벌을 받아 마땅하지만요






Posted by LinkC

2010.09.13 17:26 Web



I`m on a Chrome!

다른 브라우저들 족구해!

모두들 내 스피드를 보고 열폭하라고!



깔끔한 UI와 기존 브라우저들과 차별화를 둘 정도의 스피드를 가진

크롬이 인기 몰이 중에 있습니다

저도 크롬을 6개월 가까이 쓰고 있구요

속도면에선 정말 타의 추종을 불허하죠

이번에 공개된 7의 개발자 버전에서는 GPU가속이 사용되었다고 하며

--enable-gpu-plugin --enable-gpu-rendering --enable-accelerated-2d-canvas --enable-accelerated-compositing --enable-video-layering --enable-webgl --enable-fastback

을 대상 뒤에 붙이면 된다고 합니다


<그림1. 크롬 등록정보에서 GPU 가속을 쓰기 위해 수정 해야 할 부분>


설정해주시고 주소창에 about:memory 를 통해 확인하셔서

GPU 부분을 발견하셨다면 가속화가 제대로 이루어지고 있는 겁니다

<그림2. about:memory 를 치고 가속화가 이루고 지고 있는 것을 확인한 모습>


다만.. 플러그인들과 충돌이 일어나서

필자는 못써보고 있는 상황입니다 -.-

( 다른 브라우저에서도 가속화를 정식 준비하고 있는 단계입니다

IE는 오는 16일에 베타 버전을 발표할 예정이고, FireFox 4 에는 이미 탑재되어 베타 버전이 나와있습니다

어느 정도 안정화에 머무를 때 까지는 아마 주 웹 브라우저는 크롬이 지키고 있지 않을까 싶네요

IE는 안쓸레야 안쓸수가 없구요.. =,.= )



GPU 가속도 물론 탐나지만..

마우스 제스쳐 등이 없으면 불편해서 못쓰겠더라구요

정식 버전이 나오면 수정이 될 거라고 봅니다 :D

플러그인에서 버전 업데이트를 하던가 말이죠

이참에 제가 쓰고 있는 플러그인(확장 프로그램)을 소개할게요

1. Chrome Pig


IE의 알툴바의 기능에다가 정말 여러가지 기능을 한데 모아 놓은 플러그인입니다

마우스 제스처 때문에 설치하긴 했지만, 다른 기능들도 상당히 유용합니다 :D

https://chrome.google.com/extensions/detail/oiplkfaidhjklglajdpfehoagkmlcakh?hl=ko



2. Flash Block


자동으로 재생되는 플래시들을 방지하고 사용자가 보고자 하는 플래시만, 혹은 특정 사이트만

허용 할 수가 있습니다

로딩 시간의 상당부분을 잡아 먹는 플래시를 막는 건 속도 개선에 정말 좋겠죠?

또, 커뮤니티 사이트 등에 돌아다니는 악질 태그들 ( 말 안하셔도 할 거라고 생각합니다 :D ) 을 막는데도

탁월한 효과를 발휘하죠

https://chrome.google.com/extensions/detail/gofhjkjmkpinhpoiabjplobcaignabnl?hl=ko


3. AdBlock


광고 차단용 AdBlock 입니다

사이트에 시도 때도 없이 등장하는 광고들을 효과적으로 막을 수 있죠

페이지 소스에서 광고 코드를 catch 해서 아예 로딩이 안되게 하는 모양입니다

설치하셨으면 광고에 우클릭 하시고 bar를 조절하셔서 제거 하시면 됩니다

https://chrome.google.com/extensions/detail/gighmmpiobklfepjocnamgkkbiglidom?hl=ko




이 밖에 쓸만한 플러그인 알고 계시다면 알려주세요 :D

'Web' 카테고리의 다른 글

What is Tor?  (2) 2011.02.27
ASP.NET Padding Oracle Attack!  (2) 2010.10.13
I`m on a Chrome!  (0) 2010.09.13
웹브라우저의 춘추전국시대?  (0) 2010.09.13
Catching temporary I.E Files -IE 임시 파일 가로 채기  (5) 2010.08.24
Web Browser 제어 (IE [Internet Explorer])  (1) 2010.07.19
Posted by LinkC

2010.09.13 16:48 Web

 

<그림1. Google Chrome 개발자 버전의 사용 모습>

현재 가장 빠르다고 정평이 나 있는 크롬이 

7 버전에서 GPU가속을 꺼내들었습니다

여기서 얼마나 더 빨라 질지 모르겠네요

가장 많은 사용자를 차지하고 있지만 느린 속도 및 여러가지 이유로 

급속히 점유율이 줄어가는 IE에서도 이에 질세라  9 버전에서 GPU가속으로 맞불을 놨습니다

베타 버전은 오는 16일날 정식 공개 한다고 하는군요

MS에서도 현 상황을 충분히 파악하고 있을 거라고 생각합니다

크롬 7 이 이미 나온 시점에서 IE가 유저를 되찾을 수 있는 방법은

'속도의 우월함' 을 보이는 것이겠죠 

또한 , HTML5가 차세대 웹 표준의 기준점이 되면서 '웹 표준을 얼마나 지키느냐' 역시 이에 못지 않게 중요해졌습니다

그래서 GPU 가속을 채택했고, 아직 현 windows 사용자의 상당수를 차지하는 XP를 버리는 결정까지 내립니다

다른 브라우저에서는 XP를 지원하는데 IE 9 만 지원을 안하면 이것 나름대로 또 큰 변수가 될 지도 모르겠군요

아무튼 IE 7,8 이 웹 표준 점수에서 아주 형편 없는 점수를 받은 MS가 9 버전에서는

꽤 공을 들인것 같습니다

<그림2. IE9이 받은 웹 표준 점수>


크롬은 이미 100점을 받고 있지만요..

뭐 5점 정도고 베타 버전인 만큼 정식으로 나왔을 때는 모두 충족해서 나올 것이라 생각합니다

<그림3. 크롬의 웹 표준 준수 점수>

다음은 IE 9 의 동영상입니다

IE8에 비해 많이 깔끔해진게 맘에 드네요




이에 질세라 FireFox 4도 동영상을 공개했습니다



FireFox 역시 세계 점유율 2위를 차지하는 브라우저의 위엄을 보이며

크롬, IE 에 밀리지 않으며 경쟁에 참여하고 있습니다

유저들이 똑똑해져서 이제 더 이상 IE의 독주는 볼 수 없겠죠

바야흐로 춘추전국시대의 개막입니다




P.S 필자도 IE 9 에 큰 기대를 걸고 있습니다

우리나라 사정상 ActiveX 를 완전히 떼어버리는데는 정말 아주 오랜 시간이 걸릴 것 같고

그 때 까지는 IE를 쓸 수 밖에 없는데 느림보 8 을 타고 가자니 답답하더군요 :(

티스토리 또한 다른 브라우저는 그림 등의 리사이즈가 안되고 말이죠..

아무쪼록 MS에서 이번에는 정신차리고 힘좀 써줬으면 합니다


P.S 2  전에 웹 브라우저에 관한 포스팅을 한 적이 있었는데

이렇게 빨리 비슷한 주제로 포스팅 할 줄 몰랐네요

그만큼 웹 브라우저들끼리 경쟁이 가속화 되는 느낌이랄까요?


P.S 3 자신의 브라우저 속도 등을 테스트 하고 싶으시다면

http://ie.microsoft.com/testdrive/

에서 확인하시면 됩니다 :D




'Web' 카테고리의 다른 글

ASP.NET Padding Oracle Attack!  (2) 2010.10.13
I`m on a Chrome!  (0) 2010.09.13
웹브라우저의 춘추전국시대?  (0) 2010.09.13
Catching temporary I.E Files -IE 임시 파일 가로 채기  (5) 2010.08.24
Web Browser 제어 (IE [Internet Explorer])  (1) 2010.07.19
What is your Web Browser?  (0) 2010.05.28
Posted by LinkC

2010.09.06 22:01 System

Matt 님 블로그를 돌아다니다가 발견했습니다


Windows Movie Maker vulnerability 라고 쳐봤더니

최근에 Remote Exploit 이 있었던 모양입니다


OS 종속적인 버그가 있었던 모양이네요

특이하게도, Vista는 Exploit 되는데, Server 제품군 들과 7은 영향 받지 않았습니다


<그림1. Bug에 영향받지 않는 OS들>

패치 전, 후 파일을 받아서 비교해봤는데

한 두 군데 고친것도 아니었고

Binary Differ 프로그램을 이용해봐도 아직 감이 안오더라구요 -.-

아무튼 각설 하고 본론으로 들어갑니다

앞서 발표된 Remote 취약점과는 달리 기술적 난이도도 높지 않고 

아 이런 경우도 있구나 하고 넘어갈 정도의 버그입니다

DLL Hijacking 역시 상당한 위협수준이 될 수 있습니다

아래 동영상을 보시면 감이 오실겁니다

KB: We can"t fix this one - Microsoft DLL Hijacking Exploit from Offensive Security on Vimeo.






위 링크를 보셨으면 금방 이해하셨겠지만

간단히 설명해보겠습니다

Windows Movie Maker의 확장자 , mswmm 혹은 프로그램이 설치된 폴더에

%SystemRoot% 폴더를 만듭니다

그 폴더 안에 system32폴더를 만들고

해당 소스로 hhctrl.ocx를 컴파일하여 system32 폴더 안에 넣으면 됩니다

어때요? 정말 쉽죠?


<코드1. hhctrl.ocx의 소스>

이제 mswmm 이나 프로그램을 실행시키게 되면

떠야 할 Windows Movie Maker는 실행되지 않고 

계산기가 실행되는 것을 볼 수 있습니다

이를 야기하는 코드를 찾아볼까요?


<그림2. 버그를 야기하고 있는 부분>

환경변수를 이용하는것 이외에는 별 이상도 없는 그런 코드입니다만

바로 그 환경 변수가 문제가 됩니다

절대 경로라면 이상 없이 넘어갔을 테지만 말이죠

그 원인이 되는 것은 바로

DLL이 로딩되는 경로 순서 입니다


1) dll을 로드하려는 프로그램의 current directory
2) 현재 windows의 current directory
3) system path = %SystemRoot%
4) windows path = %windir%
5) path 환경변수에 등록된 곳들


3번 System path 보다  1번을 먼저 찾기 때문에

해당 디렉토리에 %SystemRoot%system32가 있으면 그곳을 먼저 찾는 거죠

그래서 hhctrl.ocx를 로딩하는데, 그 파일이 조작되었다면 말 다한거죠

실행 시키고 싶은 코드를 실행 시킬 수가 있는 겁니다

예를 들어, 관리자 권한으로 실행되는 프로그램에서 이러한 취약점이 있다면

관리자 권한으로 프로그램을 실행 할 수가 있게 되구요

심각한 버그는 아니지만, 아주 사소한 것으로도 이러한 Hijacking 이 일어날 수 있다는 것이

정말 재밌네요 :D


Posted by LinkC

2010.08.31 16:54 Etc../잡담

글에 들어가기 앞서 요약하자면

ALAd.dll 이란 파일을 삭제 하시면 됩니다

Windows7 기준으로 ProgramData\EstSoft\Alsong 폴더에 존재하며

다른 OS 분들은 검색하셔서 삭제 하시고

즐거운 음악 감상하시면 됩니다 :D


8.31 추가

%appdata% 에 있는 임시 폴더에도 하나 더 존재합니다 -_-

Windows7 기준으로

C:\Users\<사용자>\AppData\Roaming\ESTsoft\ALSong

이것도 같이 삭제해주세요




필자는 음악 플레이어로 알송을 쓰고 있습니다

알송을 쓰면서 상당히 거슬렸던 부분이 있었는데

플레이어 하단쪽의 광고입니다

일반 광고면 별로 신경안쓰겠습니다만

제가 검색한 키워드를 근거로 이 광고를 내보낸다는 것입니다

실제로 이어폰 구입을 위해서 검색하고 나면

얼마 지나지 않아 다음과 같은 알흠다운 광고를 볼 수 있게 됩니다


<그림1. 맞춤식 Smart AD? >

아니 , 이건 좀 아닌거 같지 않나요

물론 이런 좋은 소프트웨어를 공짜로 사용하고 있으니 광고 정도는

넘어갈 수 있겠습니다만 이런식으로 사용자의 검색어를 멋대로 가져가버리는건 문제가 있어 보이네요

아마, 이용약관에는 있겠지만.. 좀 씁쓸합니다

어디 어떤 정보를 수집하는지가 봐볼까요?


<그림2. 폴더를 샅샅이 뒤지고 계시는 ALSong.exe 님>

이 밖에도 즐겨찾기, History 등등 임시 인터넷 파일이란 파일은

모조리 다 접근하고 있습니다

물론 파일 하나하나 내용까지 들춰보는건 아닌거 같습니다만

저정도의 다수 폴더를 도는건 사용자 입장에서 다소 기분이 나쁠 수 있죠

* 다른 파일에서도 이런 식으로 접근 하는 것을 보았습니다

아마 특정 API 가 이런식으로 접근하는게 아닌가 싶네요


아무튼 이렇게 수집한 내용을 특정 사이트로 보내고 그에 대한 광고 내용을 받겠죠

이렇게 나가는 패킷을 조사해보면..

<그림3. 특정 사이트로 광고를 요구하고 그에 대한 xml 코드를 받아오는 모습>

들어가보니 다음 로드뷰 광고군요

현재 알송 광고중 대다수를 차지하고 있는

'우리집도 찍혔다?' 광고에 해당하는 링크와 일치합니다

다음 패킷과 비교를 해보니 1분 간격으로 오가는군요

burst 인자로 들어가는 Timestamp 값으로도 유추 가능 합니다 :D

이후에 파일이 하나 생성되는데

<그림4. 코드를 받아와서 파일을 생성하고 곧바로 삭제 하는 모습>

전에 포스팅 했던 임시 파일을 잡아내는 코드를 써서

내용을 복원해보았습니다

<그림5. 그림4에서 잠시 생성되었던 adview[1].txt 복원 내용>

내용을 보니 좀 전에 패킷으로 받은 내용과 일치합니다

그럼 이제 어떤 내용을 수집하는지 알아보도록 하죠

Alsong에 삽입된 dll을 차근차근 살펴볼까요?



<그림6. Alsong에 삽입된 일부 dll들>



ALAd.dll , ALsmartAd.dll 가 의심스러워보입니다

Export 함수를 봐볼까요?



<그림7. ALAd.dll 과 ALSmartAD.dll 의 Export 함수 >

IDA로 까보죠



ALAd 에서 ALSmartAd.dll 과 ALSmartAd.ini 를 불러 오는거 같네요

코드를 보면


<그림8. ALSmartAd.dll 의 Export 함수 로딩>

아아

보니 ALSmartAd.dll 에서 ini 파일을 파싱하는 것으로 보입니다



<그림9. ALSmartAd.ini Parsing>


그렇다면 이 ALSmartAd.ini 를 살펴볼까요

<그림10. ALSmartAd.ini 의 내용 >

이거군요

드디어 발견했습니다

네이버, 11번가 , G 마켓 등등...

왠만한 사이트들 검색어는 모두 걸러내는군요

히스토리에 남은 사이트들이 이 파일의 먹이가 될겁니다

자 그럼 이제 어떻게 이 광고를 막을까요

여러가지 방법이 있겠습니다만

ALAd.dll 을 로딩 하지 않으면 됩니다

간단하죠

파일을 삭제해버립니다


Alsong 설치 폴더에는 없고

Windows7 기준으로 ProgramData\ESTSoft\Alsong 에 존재합니다

XP 분들은 ALAd.dll 을 검색하셔서 찾으면 되겠죠?

그리고 깔끔하게 음악 감상 합시다 :D





P.S . 글 작성하다 보니 가운데 정렬이 먹통이 되버렸네요

스크린샷이 간혹 사라지는 경우도 발생하고.. 이거참..


Posted by LinkC

2010.08.28 13:45 WarGame

1년 전쯤에 Saphead가 주최한 Hackjam 대회가 있었습니다

문제마다 만화로 그려내서 상당히 재밌었는데요

폴더 정리를 하다가 문제를 발견해서 풀이를 올립니다

이번 문제는 Hacking에 대한 지식을 시험하기보다는

Hacker로서의 기본 소양인 코딩을 시험하는 문제였습니다

바로 Game of life의 룰을 숙지하고 이에 맞도록

코딩을 하는 것이 해당 문제의 목표였죠

해당 문제의 포트에 접속해보면

다음과 같은 화면을 보시게 됩니다

<그림1. 문제에 접속하면 맞이하는 화면>


#은 벽이고

*는 한 점을 나타내게 됩니다

좀 더 쉽게 이해하시려면 다음 사이트를 방문하셔서

직접 플레이 해보고 룰을 익히시는게 좋겠죠

http://www.bitstorm.org/gameoflife/

 
<그림2. Game of life의 실제 플레이 모습>



이제 문제가 이해가시나요?

아래 적혀진 < : 숫자 > 는 바로 얼마만큼 진행을 시키는가 입니다

그림1을 보면 저 벽을 유지한채로 12단계를 진행한 것을 Recive 하기를 원한다는거죠

OverFlow, FSB 등이 아닌지라 착실하게 풀어나가는 방법밖에 없습니다

이 게임의 룰은 다음과 같습니다


<그림3. Game of life의 룰>


자기 자신을 기준으로 8칸의 Cell을 검사한 뒤에 해당 룰을 따르게 되는데

그 Cell이 점유되어 있는가 없는가에 따라 약간 달라집니다

이웃이 없거나 , 1개 있을 경우 사라지고

2,3개는 그대로 남으며

4개 이상부터는 사라집니다

만약 Cell 내에 아무것도 없다면

3개의 이웃이 있을 경우 Cell을 점유합니다

문제를 풀어서 해당 port로 보내게 되면 아시겠지만..

한번만 풀면 돼는게 아니라 16라운드 까지 풀어야 합니다

1라운드 , 2라운드... 16라운드까지 풀어야

비로소 정답을 얻게 되죠

뭐 일단 1라운드를 깰 알고리즘을 짰다면

나머지는 별로 어렵진 않죠




문제가 포함하고 있는 문자열인 ###을 포함하지 않은 메세지를 받을 때까지

문제 풀이 루틴을 돕니다

다만 list 형식으로 일일히 나눠주고

다시 정답형식에 맞는 format 으로 바꿔주는게 귀찮더군요

아무튼 이렇게 돌려주면


<그림4. PassWord GET!>
Posted by LinkC

2010.08.24 22:46 Web

 제목은 거창하게 썼습니다만

사실 별거 아닙니다

인터넷에서 돌아다니는 동영상, 음악 파일들을 소장하고 싶을 때

자주 임시 폴더를 이용하고들 하죠

Windows7의 경우는 약간 트릭이 필요합니다

7의 인터넷 임시 파일을 살펴보면


<그림1. Windwos7의 인터넷 임시 파일의 모습>


매우 허전한 것을 볼 수 있습니다-.-

우리가 보았던 이미지, 음악 파일들은 대체 어디로 증발한걸까요

물론 숨김파일, 시스템 파일 숨김 체크는 진작 해제 했죠



<그림2. 숨김 파일은 모두 볼 수 있도록 설정>




<그림3. Cookie 파일들의 용량이 100메가?, 파일 개수가 8000개? >


임시 인터넷 파일 폴더의 자체 속성을 살펴보면 뭔가 있음을 알 수 있습니다

보통의 숨김 처리 방식은 아닌가보군요

간단한 Python Code로 확인해봤습니다



*한글 사용을 위해 1번째 줄의 코드를 추가해주었습니다

아무튼 이렇게 확인을 해보면

숨김해제로도 보이지 않던 파일,폴더들이 등장합니다

<그림4. 꼭꼭 숨어있던 임시 인터넷 파일들>

직접 타이핑해서 치면 들어갈 수 있습니다



<그림5. 기존의 임시 인터넷파일에 Low 를 직접 타이핑해서 폴더안에 들어간 모습>
들어가보니 우리가 원하는 것들이 있군요

지난 몇일간 봤던 이미지 파일 등 여러가지 Temp 파일들이 모여있는 것을 확인할 수 있었습니다

아무튼 Window7 에서는 인터넷 임시 파일 보기가 약간 까다롭습니다

서두가 길었군요

이렇게 파일을 뺄 수 있는 일반적인 경우가 존재하는 반면

임시 인터넷 파일들을 바로 삭제해 버리는 경우도 있습니다

어떤 경우에 사용되는지는 다들 짐작 가시겠죠?

아무튼 이런 파일들은 매우 빠르게 삭제 되기 때문에

0.04초만에 날아오는 미사일 탄두를 맞추는 어떤 초인이라도

직접 손으로 파일을 복사하기란 불가능에 가깝습니다

코드를 짜서 파일이 생성 될 때 까지 무한히 시도를 하다가

파일이 생성 되고 , 지워지기 전 그 아주 짧은 시간 동안 파일의 내용을 긁어내는 작업이 필요합니다




이번 코드는 악용 가능성이 존재하기 때문에

어느 정도 코드를 잘라냈습니다

약간의 응용을 거치면

여러 파일을 순차적으로 가져올 수 있습니다


<그림5. 순차적으로 페이지를 가져온 모습>
P.S

간혹 페이지를 읽고 있을 때와 IE 에서 파일을 지우고 있을 때 충돌이 일어나기도 합니다

그렇게 되면 파일이 지워지지 않고 남아있게 되죠

이 충돌은 어쩔 수 없는 것 같네요




'Web' 카테고리의 다른 글

I`m on a Chrome!  (0) 2010.09.13
웹브라우저의 춘추전국시대?  (0) 2010.09.13
Catching temporary I.E Files -IE 임시 파일 가로 채기  (5) 2010.08.24
Web Browser 제어 (IE [Internet Explorer])  (1) 2010.07.19
What is your Web Browser?  (0) 2010.05.28
What is BHO?  (2) 2010.05.24
Posted by LinkC

2010.08.23 01:01 WarGame

저번 문제와 같이 바이너리를 얻을 수 없는 관계로

vnsecurity에서 작성한 문서를 토대로 제가 이해한 내용을 써내려가는 식의 포스팅을 하도록 하겠습니다


문제는 대략 메모를 남기는 프로그램을 Overflow 취약점을 이용해 쉘을 따는것 같습니다

여기서 핵심은 메모를 남기는 buffer의 크기가 매우 작아서, 쉘 코드가 들어갈 수 없다는 것입니다

쉘 코드를 나눠서 메모를 여러번 남김으로써, Exploit 하는 문제죠

먼저 문제 코드를 살펴보겠습니다


한가지 특이점은 29번째 줄의 

 if ( !setjmp(exception_env) )   


38번째 줄의
 
longjmp(exception_env, 1);   


라는 코드가 쓰인 것입니다

setjmp / longjmp 문에 대한 설명은

http://studyfoss.egloos.com/5275830 에서 얻을 수 있었습니다


setjmp/longjmp는 프로그램의 흐름을 비정상적으로 제어하는 것으로 이른바 nonlocal goto라고 불린다.
nonlocal이라고 하는 것은 일반 goto와 달리 함수 밖의 위치로 이동할 수 있기 때문이다.
하지만 아무런 제한없이 아무 함수로나 움직일 수 있는 것은 아니며
이동할 위치의 stack frame이 보존된 상태여야 한다.
(즉, 해당 함수가 아직 실행되고 있는 상태에야 한다.)
일반적으로 중첩된 함수 호출내에서 예외 상황이 발생한 경우
상위의 예외 처리 루틴으로 바로 제어를 넘겨서 실행할 수 있도록 구현할 수 있다.

그러니까 요약하자면

setjmp에서 저장한 레지스트리 값, 스택 구조는 복원하되, 스택 내용은 복원되지 않는다

라는 것이군요

먼저 한번의 메모 기록에 들어갈 수 있는 쉘 코드의 크기는 17byte 입니다

전체 메모 크기가 30 byte 지만

44번째 줄의

" Memo : < Shellcode> , size : <Code size> "

의 부가 설명 덕분에 13byte가 빠지게 됩니다

여기서 우리가 Shellcode 를 넣으려고 하는 Buffer는

memo_array[30][30] 이고 , 첫번째 기록한 메모와 두번째 메모와의 Gap 은 13byte 가 되므로

쉘코드 뒤에 JMP 13 명령어를 넣어주어야 할 것입니다

대략


<그림 1. 메모 1개 기록 할때의 memo_array[n][30] 구조>

그리고 메모를 모두 기록했다면, 마지막으로 memo_array의 주소로 JMP 해야 합니다

여기서 바로 longjmp 가 쓰이게 됩니다

longjmp를 조작해서 setjmp 가 아닌 Shellcode 가 들어있는 memo_array 의 주소로 JMP 하면

일사 천리로 진행되겠죠

37번째 줄의 OverFlow 를 이용합시다

여기서 메모리 구조를 살펴보면


<그림2. bss 구역의 메모리 구조>

buf[4]와 setjmp 에서 저장된 jmp_buf_tag 는 24byte 만큼 떨어져있습니다

정확히 24byte가 OverFlow 되므로 Exploit하는데 문제는 없어 보이는군요

정리해보죠

Shellcode를 한번 메모 기록에 15byte 씩 집어넣습니다

각 기록시 JMP 13 를 붙여 총 17 byte를 입력합니다

이렇게 잘라서 Shellcode를 삽입하고

마지막으로는 24byte를 OverFlow 시켜서 쉘코드의 초기주소로 점프 합니다

이 때 초기주소는 char buf[4] 가 0x0804AD48 이니까

900만큼 빼줘야겠죠 16진수로 384니까 이를 빼주면 0x804A9C0 입니다.

여기서 Memo : 수식부분 앞 꼬리 7 byte 를 건너 뛰면

0x804A9C7 이 됩니다


이를 이용해 vnsecurity 에서 짠 Exploit 코드는 다음과 같습니다



'WarGame' 카테고리의 다른 글

Padocon 2011 Twit Bot 문제 풀이  (0) 2011.02.27
Hackjam level3 Solution - Game of life  (0) 2010.08.28
ISEC 2009 Challenge 12 Solution  (0) 2010.08.23
ISEC 2009 Challenge6 with GOT OverWrite  (0) 2010.08.22
[ CodeGate 2010 ] Challlenge 15 풀이  (0) 2010.07.06
[ CodeGate 2010 ] Challenge 8  (0) 2010.06.22
Posted by LinkC

2010.08.22 00:08 WarGame

*이 풀이는 Vnsecurity 에 올라온 ISEC 2009 Challenge6 풀이를 제 나름대로 정리하여 포스팅한 글임을 알립니다

ISEC 2010 일정이 최근에 공개 되었습니다

지난해 ISEC에 참여는 못했지만 CTF 풀이 문서는 남아 있을 것 같아서

뒤적 거렸더니 풀이 문서는 발견할 수 있었습니다

아쉽게도 문제 링크는 다 죽었더군요 -.-

풀이중에 GOT를 Overwrite 해서 그것도 꽤 특이한 방법을 쓴 것이 있어서

정리하여 둡니다

6번 문제는 Remote BOF 문제라고 합니다

핵심이 되는 주요 함수는 다음과 같습니다



23번째 줄에 있는 strcpy가 첫번째 관문입니다

이후에 있는 34번째 줄의 strncmp의 조건을 만족하기 위해서 이를 활용해야겠죠

randbuf 는 이후로 memset에 의해 초기화가 되니 이를 손댈수는 없고

randnum을 손대야 합니다

buf128에서 32byte를 입력받고

16byte의 destbuf16에 strcpy를 하니까 16byte가 Overflow 됩니다

여기서 randnum을 수정해줘야 하는데

소스상으로 약간 잘못된거 같네요

풀이자가 hand ray 로 풀어낸 모양입니다

아무튼 , 사실 randnum이 destbuf16보다 먼저 선언 되어 있어서

덮어쓸수 있다는 거죠

Dummy byte를 포함해서 쭉 덮어씌워야 합니다

속편하게 32byte 쭉 채워주면 되겠죠

첫번째 입력은 32byte만큼 특정 값을 채워줍니다

그 다음에 32번째에서 다시한번 입력을 받는데요

이번엔 128byte만큼 받습니다

바로 이곳이 Core 라는 겁니다

strncmp로 조금 전에 넣어두었던 randnum에 일치하는 수를 넣어줍니다

예를 들어 A로 채워주었다면

buf128에도 A를 채워넣어주면 되겠죠

는 풰이크고 사실 25번째 줄

snprintf(randbuf12, 5, "%d", randnum)

 에서 5자리만큼 잘려들어갔기 때문에

16337 이 들어갔을 겁니다

사실 randnum 에는 AAAA가 들어갔다고 했을 때 , 1633771873 이라는 값이 들어갔을 것이고

이는 int형의 MAX 값. 2^31-1 = 2147483647 을 넘지 않기 때문에 고스란히 들어갔겠죠

여기서 5자리가 잘려서 16337이 됩니다

또 34번째

if ( strncmp(buf128, randbuf12, 4) ) 

 에서 앞 4자리만 비교를 하게 되니

1633만 넣어주면 되겠죠

처음 4byte 는 1633 입니다

그 다음이 문젠데요

키를 읽어놓고 정작 출력을 해주지 않습니다

황당하기 그지 없는 경우죠

여기서 주목해야 할 점은 printf문 앞의 두 strcpy 문입니다

  strcpy(randbuf12, buf128);  
  strcpy(buf_ptr, buf128);

괜히 집어 넣은게 아니겠죠

buf_ptr이 가리키는게 없던것도 걸립니다

두번째에는 buf_ptr의 값을 맘대로 변경할 수 있게 했구요

네, 그러니까 buf_ptr는 '어디든지 문'이라고 보시면 됩니다

마법의 포인터죠

buf_ptr가 가리키고자 하는 곳의 주소를 입력하면

그 후의 strcpy에서 그 값을 바꿀수 있게 합니다

정말 멋집니다

이제 뭘 해야 할까요?


....




Local 이라면 이것저것 해보겠는데 Remote 라는게 뭐 어쩔 수가 없네요

Printf 문의 "eldhkcalb"  문자열을 keystr 의 주소를 바꾸면 되..

지 않겠네요

포인터로 가리키고 있다면 keystr를 가리키도록 바꾸면 될텐데 직접 문자열로 접근하고 있습니다

주소를 알아봤자 말짱 헛것이라는 거죠

생각해보니 우리가 원하는 것은 printf 문도 아닙니다

그렇다면 소켓으로 keystr을 보내주는 sendsocket 함수를 짜서 보내야될텐데

남은 버퍼에 그것이 다 들어가지도 않을 것이고 , Return Address를 손 댈 상황도 아니며

정확한 Buffer의 주소도 알 수 없습니다






정신을 추스리고 다시 살펴보죠

printf 문의 호출을 다른 함수로 바꿀수 있다면?

Windows의 Hooking 떠오릅니다

여기서 접근 한 것이 GOT 입니다

Global Offset Table의 줄임말로 함수의 정보를 담고 있는 Table 인데요

Windows에서 따지자면 IAT와 같은 역할을 하고 있다고 보시면 됩니다

흡사 Windows 에서 Hooking 하듯이 Linux에 적용해보는 겁니다

다만, 이 경우는 코드의 자유도는 떨어집니다

전에 있던 코드들을 짜깁기 해야만 하죠

흡사 ROP의 개념을 보는 것 같군요

Binary 가 없어서 직접 캡처해서 찍을수 없어 풀이자의 자료를 첨부합니다

<그림1. printf 와 fread의 GOT>

우리의 목적을 먼저 정의해봅시다

sendtosocket(fd , keystr, 32) 함수를 호출 하는 것입니다

이는 fread( keystr, 32, 1 , stream) 과 sendsocket( fd , "~~" );

로 합성될 수 있습니다


마침 인자 순서도 적절하군요

그림1을 보시고 뭔가 감이 오시나요?

printf 문을 호출 할 때 fread의 함수 일부를 호출 - fread를 호출할 때 sendsocket의 일부를 호출

이렇게 연쇄적으로 호출하면 우리가 원하는 목적을 달성할 수 있습니다

이런 류의 문제를 본적이 없어서 이해하는데 꽤 걸려버렸습니다




이를 토대로 Exploit 코드를 짜봅시다

처음 입력 받을 때 a 등의 문자로 32 byte 입력합니다

두번째 입력을 받을 때는 초기 4byte는 첫번째에 넣어주었던 값을 고려해서 strncmp를 통과할 수 있도록 넣어줍니다

이후 code가 핵심인데요

1) buf_ptr 가 우리가 원하는 값을 가리킬수 있도록 dummy byte를 넣어줍니다

<그림2. buf_ptr 하위의 메모리 구조>
* buf_ptr의 값은 아직 미정

2) dummy byte에는 printf의 GOT를 덮어씌울 주소가 들어갑니다

GOT 구조에 따라 이 dummy byte의 구성이 달라집니다

문제 풀이를 보니

0x0804A2FC : waitpid GOT
0x0804A304 : fread GOT
.....
0x0804A316 : printf GOT

이런 식으로 구성이 되어 있는것 같습니다

초기 4byte 때문에 fread 전에 있던 어떤 함수의 GOT부터 수정해 나가야 합니다

그게 바로 waitpid 로군요

이를 토대로 짜보면..

<그림3. Exploit 을 위한 메모리 구조, 변경 전>

그림1 을 참고 했을 때, printf 에는 fread의 일부가

fread 는 sendtosocket이 들어갑니다

<그림3. Exploit 을 위한 메모리 구조, 변경 후>

이를 토대로 짠 Exploit Code 입니다



** 제 나름대로 이해한 방법으로 글을 풀어보았습니다만, 제가 이해를 잘못했다거나 풀이자의 의도를 오해했을 수 있습니다

뭔가 틀린것 같다면 댓글로 남겨주세요 시정하겠습니다 :D
Posted by LinkC

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday68
Today2
Total331,090

달력

 « |  » 2019.8
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

최근에 받은 트랙백

글 보관함


. .