Search results

'Life/School'에 해당하는 글들

  1. 2010/05/01  Final Exam Spring `10 (12)
  2. 2010/02/23  CMU에서 15-441 Computer Networks를 들으면.. (2)
  3. 2010/01/25  새 학기를 시작하며 - (4)
  4. 2009/11/10  Goals for 2009/2010 (18)
  5. 2009/10/25  [일기] 오랜만의 여유.. (15)
  6. 2009/09/24  Plaid Parliament of Pwning (18)
  7. 2009/09/24  Watching Bill (2)
  8. 2009/08/17  Things to do... (13)
  9. 2009/07/08  읽으라는거냐 말라는거냐! (4)
  10. 2009/07/02  Red Pill and More (4)
사용자 삽입 이미지

글과 아무 관계없는 xkcd 만화



ㅋㅋㅋ...

또다시 그 시기가 돌아왔네요 ㅡ_ㅡ;

바쁜일상(ㅋㅋ..) + 게으름 때문에  포스팅이 한동안 없었지만..
앞으로 약 열흘간 또 없을 예정입니다..ㅋㅋ

기말고사가 또 마지막날까지 있는 슬픈 현실... 4학년때는 첫 주에 끝나는 파이널 스케쥴이 나오길..


그럼 아무쪼록 잘들 계시길..





2010/05/01 19:14 2010/05/01 19:14


이렇게 됩니다.


2010/02/23 14:02 2010/02/23 14:02
─ tag 

음.. 정말 오랜만에 글을 쓰는듯 싶네요 :p

그 이유에는 제 게으름과 귀차니즘도 있긴 하지만..
무엇보다 학기가 시작하자마자 미친듯이 바빠지는 바람에 ^^;

일단 이번학기 스케쥴을 먼저 보자면..

사용자 삽입 이미지

네, 그렇습니다. 사실 과목수만 보거나 클래스 스케쥴만 보면 그렇게 살인적이지 않지요..
하지만 여기서 주의해야할 점은.. 총 5과목 중에서 4과목이 CS라는 점..
그리고 4과목 모두가 coding이 꽤 많다는 점이죠..

3학년이나 되서 3D-Calculus를 왜 듣는지 궁금해 하실 법도 한데..
솔직히 말하면, 수학 부전공을 끝내기 위해서 한 과목을 더 들어야하는데..
theory/analysis쪽은 더이상 듣기 싫어서.. Numerical Method라는 과목을 들으려고 했으나..
pre-req이 3D인 바람에 한학기 미뤘습니다.


이제 저 위의 스케쥴에 적혀있지 않은 이른바 hidden 스케쥴을 얘기하자면..

이번학기에도 계속 같이 일하던 교수님과 연구를 하고 있습니다.
새학기에 맞춰서 대거인력이 투입된 새로운 프로젝트를 시작했습니다만,
사실, 저번학기 중반쯤 상길이형과 시작한 프로젝트가 끝나지 않아서.. (페이퍼작업이 너무 어려워용 ㅠ_ㅠ)
플젝 두개를 뛰고있는 꼴이라.. (하나도 제대로 해본적이 없어서 그런지..) 많이 버겁네요 ㅎㅎ

그래도 교수님과 형님들이 앞뒤에서 끌어주고 밀어주셔서 즐겁게 하고 있습니다 :)

또, 보이지 않는 스케쥴에는 제가 이끌고 있는 저희 학교 보안연구그룹인 Plaid Parliament of Pwning의 정기회의가 들어있습니다.. 그것도 매주 금요일 저녁에 말이지요.. :(


아직까지는 어떻게 버텨가고 있긴 한데, 하루하루 느끼는게.. "아 이러다가 몸이 박살날거 같다" 라는 기분이랄까.. 물론 그럴일은 없겠지만..ㅠㅠ 하고싶은것도 많고 할것도 많은데 시간은 없고 몸은 쉽게 피로해져서 걱정입니다.

아래는 위에서 보이지 않는 hidden schedule이 살짝 보이는 개인 캘린더 =ㅅ=;

사용자 삽입 이미지
그래도 이번주는 꽤 괜찮은 편이네요~
다음주는 거의 hellgate 수준 ㅋㅋ..


학기 시작하고 너무 힘들어서 한풀이 좀 해봤습니다 ~~ (밀린 포스팅도 좀 할겸.. ㅋㄷ)




2010/01/25 13:32 2010/01/25 13:32

아무래도 계속 생각하고 까먹고를 반복하는 것 보다, 생각났을때 적어두는 편이 낫겠다 싶어서..


Goals to Accomplish 2009/2010..

  • iPhone Application Development 공부/개발
  • Ruby 언어 공부/익숙해지기
  • Research 주제 고민하기
  • Functional Programming 공부하기 -_-); (+Ocaml)
  • Network Programming 공부
  • C++ 어플리케이션 만들기
  • Wargame Workframe 만들기 (RoR || JSP || PHP)
  • Hacking Competition에서 유용하게 쓸 툴 만들기
  • DefCon 문제 풀어보기 및 준비
  • Plaid Parliament of Pwning 신입멤버 트레이닝 자료 및 인포세션 자료 설계 및 구축
  • 보안관련 페이퍼/논문 무작정 읽기 - 평균 1주일 1페이퍼
  • 대학원 추천 레터 써줄 교수님 2명 더 찾기 -_-;;

이외의 몇 개가 더 있었던거 같은데, 기억이 나질 않네요..
기억나는데로 추가 ~

Category
For...
  - Next Semester
  - Fun & Experience
  - Graduate School & Research
  - Elite Hacker








2009/11/10 01:41 2009/11/10 01:41
─ tag  , ,

정말 지난 2달이 어떻게 지나갔는지도 모를만큼 이번 학기는 순식간에 지나가고 있다.

이게 좋은건지 나쁜건지는 잘 모르겠지만, 이제 이번 학기도 1달여 남짓 밖에 남지 않았다.


쉴틈없이 2달을 달려왔다..
그냥 하는 소리가 아니라, 정말 하루 4~5시간 이상 잘 수 있었던 날이 거의 없었던것 같다.


저번 학기에 너무 힘들고 지쳐서, 이번 학기만큼은 스케쥴을 인간적으로 작성해야겠다고 그렇게도 다짐했는데, 어쩌다가 또 이런 일이 일어난건지..

하여튼, 바쁜 만큼 다른 잡생각은 거의 하지 못하고 살아왔지만.. 그만큼 주위 사람들에게나 내 자신에게나 너무 소홀했던 것은 사실이다.
내 성격이 워낙 내 기분에 따라 극과 극을 오고가는지라, 내가 저기압일땐 주위사람들을 피곤하게 만들거나 작은 일에도 화내는 경향이 있다. 물론, 항상 고쳐야겠다는 마음은 가지고 있지만, 쉽사리 고쳐지지 않는다.

하나님과의 교제가 거의 사라진게 가장 큰 문제라고 할 수 있겠다.
일전에는 '다른건 몰라도 내 신앙심만은 자신있던' 나였는데, 최근엔 많이 흔들리고 약해졌다.
더 안쓰러운건, 결국엔 나 혼자만으로는 나아갈 수 없다는 사실을 망각한채 내 자신만 믿고 의지하며 나아가고 있다는 점이다. 간간히 이런 내 모습을 발견하면, 아주 잠깐 동안 다시 주님을 찾지만.. 그리 오래가지 못한다.

바쁜 생활이 나에게 변화준건 신앙심뿐만이 아니다.
나름 활달하여 인간관계를 넓혀가는걸 좋아했던 나를 바꾸어놓았다.
예전에는 상대방이 별 생각이 없어도 먼저 찾아가서 아는척하고, 더 친해지려고 하고 하던 나였는데..
요즘에는 그냥 다 귀찮다. 다른 사람들이 어떻게 살아가는지 그리 궁금하지도 않고, 알아갈 여유도 없다.


한 때 정말 여유가 너무 넘쳐서 문제였던 나의 삶의 패턴을 바꾸어놓은것은 '대학교' 라고 할 수 있겠다.
공부하는게 싫은게 아니다. 오히려 대학와서 공부해서 새로운걸 배운다는게 즐겁고 재밌다는걸 깨달았다.
하지만, 가끔 친한 친구들과 진지한 대화를 하다보면.. 항상 나오는 주제가 있다.
"여유 없이 끊임없이 공부만 하는게 옳은걸까. 한 번뿐인 대학생활을 이렇게 보내면 나중에 후회하진 않을까."
점점 갈수록, 그저 학교에만 묶여있는 나 자신을 발견한다. 삶에 여유가 사라졌고, 이젠 학교일 (공부든 숙제든)을 잡고 있지 않으면 불안감마져 생긴다.


이번주말이 아마 지난학기+지금까지의 이번학기 를 통틀어 가장 여유로웠던것 같다.
다만, 숙제나 시험이 없는 형식상의 여유일뿐. 쉬면서도 불안해 하는건 다르지 않았던듯 싶다.

흠.. 이런 쓸때없는 글이나 끄적이고 있는걸 보면... 차라리 여유없이 사는게 나을런지도 모르겠다..



2009년 10월 25일




2009/10/25 19:50 2009/10/25 19:50
─ tag 
사용자 삽입 이미지

드디어 올 것이 왔습니다.

학교에 들어올때부터 보안 동아리에 가입하고 싶었지만, 딱히 그런 성격의 동아리가 존재하지 않아서 독고생활을 하고 있었는데, 제가 만들어버리는 일이 생겼습니다.

보안그룹 창단은 이번 여름에 제가 리서치할때 지도교수님이셨던 David Brumley 교수님께서 적극 지원해주시면서 가능해졌습니다.

이름은 Plaid Parliament of Pwning.
직역하면 조금 어색해지지만, Plaid는 저희 학교의 상징 중 하나인 격자무늬를 뜻합니다.
학교를 대표하는 그룹인 만큼, 원래 가명이었던 Untouchables는 버리기로 했습니다 :D

현재는, CMU Collaborative Innovation Center 2층에 headquarter 를 두고 있습니다.

멤버 정책은 'ANYONE who is interested' 이며, 말그대로 관심있는 사람이라면 아무나 가입이 가능합니다.
하지만, 내부적으로 군을 나누어 관리합니다.

현재 멤버는 저를 포함하여 약 30명정도이고, 계속 증가하고 있습니다 :)

이제서야 이런 그룹이 만들어져서 조금 아쉽기는 하지만, 앞으로 졸업할때까지 많은 대회참여와 리서치를 통하여 널리 알려질 최고 보안그룹이 되기위해 노력할 것입니다.


2009/09/24 16:15 2009/09/24 16:15

Bill Gates 가 학교를 방문했습니다.

이유인즉슨, 이번 학기부터 오픈한 Gates-Hillman Center 리본 끊으러 왔습니다.


사용자 삽입 이미지


저 뒤에 관계자(?)들이 입고 있는 티셔츠도 하나 받아왔구요 ㅎㅎ

저 가위는 빌게이츠가 처음으로 사용하고, 앞으로 컷팅 행사때마다 쓰일거라고 하네요..

사용자 삽입 이미지


연설때나 질문때는 Computational Biology를 집중적으로 말해서..
개인적으로는 그닥 흥미롭진 않았지만..

빌게이츠를 직접 보게 되서 나름 재밌었습니다 :p





빌게이츠 keynote 동영상..


2009/09/24 15:38 2009/09/24 15:38
─ tag  , ,
Watching Bill :: 2009/09/24 15:38 Life/School
Things to do after I get back to CMU..

1. Finish up Research work with professor
   - Need to finish writing the report.
   - Provide few exploitation problems.
   - Upgrade tracker module with visual features.

2. Moving
   - Move my stuffs out.
   - Clean house.

3. CL@C (Cyber Life @ CMU)
   - Create a website for the club.
   - Organize members.
   - Finalize the time line for projects.
   - Send out e-mails.

4. ???????????? (Hacking/Security Group at CMU - name is unknown yet)
   - Get approved as official school organization, if possible.
   - Create a website for the team.
   - Set up Training Server.
   - Finalize the member list.
   - Send out e-mails.

5. Semester Preparation
   - Gather textbooks.
   - Print out schedule.

6. TA (Maybe not)
   - Contact professor for plausible time (schedule).

7. Build Server Computer
   - Order computer parts.
   - Should I build the case or buy one? :p

...

few others are coming.


2009/08/17 10:05 2009/08/17 10:05
─ tag  , ,
Things to do... :: 2009/08/17 10:05 Life/School

요즘 작업하는거에 대해서 설명해준다고 .... 화이트보드에 이것저것 그려가면서 설명을 해주신 교수님..

사용자 삽입 이미지

어쩌라는거지....



2009/07/08 12:57 2009/07/08 12:57
─ tag  , ,

최근 malware analysis research를 하다보니...

이런 저런 공격방법들과 예제등을 볼 수 있었습니다.

신기했던 것들중 하나에 대해서 써보려 합니다.

일명, Red Pill.
 - Matrix라는 영화에 나온 그 빨간약이 맞습니다. Red Pill이 하는 일을 소개하기에 앞서
   그 배경부터 설명하는게 나을듯 싶군요.
 - 일단, 요즘 malware analysis의 대부분을 VMware나 VirtualBox 같은 VMM
    (Virtual Machine Manager/Monitor)위에서 하여서 보다 안전하고 확실해졌는데요...
 - 그러다보니 이 사실을 모를리 없는 malware 제작자들도 머리를 썼습니다.
    VMM안에서 실행중인지 아닌지 여부를 판단하여서 취하는 행동을 다르게 하는것이지요.
    (즉, VM안에서는 착한척.. 밖으로 나오면 나쁜놈이 되는겁니다..)

이 Red Pill 이라는것은 이와같이 VMM 안에 있는지 아닌지 여부를 판단해주는 프로그램입니다.

2004년 11월에 invisiblethings.org 에 게재되었습니다.

소스코드는 정말 간단합니다..
/* VMM detector, based on SIDT trick
 * written by joanna at invisiblethings.org
 *
 * should compile and run on any Intel based OS
 *
 * http://invisiblethings.org
 */


#include <stdio.h>
int main () {
  unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
  *((unsigned*)&rpill[3]) = (unsigned)m;
  ((void(*)())&rpill)();

  printf ("idt base: %#x\n", *((unsigned*)&m[2]));
  if (m[5]>0xd0) printf ("Inside Matrix!\n", m[5]);
  else printf ("Not in Matrix.\n");
  return 0;
}




하지만, Red Pill은 VMM Detection의 시작에 불과했습니다.
Red Pill에서는 SIDT (Store Interrupt Descriptor Table) 명령어만을 사용하지만, 향후 계속된 리서치에서는 LDT (Local Descriptor Table)을 이용한 디텍션 기법도 소개되었습니다 [paper].

Red Pill에 사용된 SIDT 기법의 원리를 간단히 설명하자면 다음과 같습니다:
SIDT 명령어는 IDTR(Interrupt Descriptor Table Register)의 정보를 저장하는데, IDTR 레지스터는 단 한개밖에 존재하지 않기 때문에, 두 개 이상의 OS (host OS + guest OS)가 동시에 돌아가기 위해서는 VMM이 guest OS의 IDTR을 host OS의 것과 겹치지 않도록 다른곳에 저장해야됩니다.

여기서 문제가 생기는 것인데, 이러한 separation 때문에 VMM 여부를 detect할 수 있게 됩니다.
VMWare에서의 relocated IDT의 주소는 0xffXXXXXX 이고, Virtual PC에서의 relocated IDT 주소는 0xe8XXXXXX 인데 반해, Native OS 에서는 Windows는 0x80FFFFFFF, Linux에서는 0xC0FFFFFF 이기 때문에..
IDT 주소를 받아온 다음 first byte을 0xd0과 비교해서, 크면 VM, 작거나 같으면 Real Machine으로 간주합니다.


이러한 SIDT 문제에 대해서 다룬 USENIX paper 도 읽어보시면 좋겠습니다.


이같은 VMM detection 방법들이 malware에 급격히 사용되면서, 정확한 분석이 어려워지자..
또다른 리서치 분야에서는 반대방향의 연구를 시작했습니다.
바로 Anti-detection-mechanism 인데요..

하지만 곧, 이마져도 bypass 하는 다양한 기법들이 소개되었습니다 [trapkit].
Trapkit에서 배포한 VMWare detection tool인 ScoopyNG 에서는 총 7가지의 테스트를 합니다.
이 중 한개라도 VMWare detected 라는 문구를 돌려받으면, 현재 VMM안속에서 프로세스가 실행중이라고
보시면 됩니다.

<ScoopyNG Source Code>
/* ScoopyNG - The VMware detection tool
* Version v1.0
*
* Tobias Klein, 2008
* www.trapkit.de
*/

#include <windows.h>
#include <excpt.h>
#include <stdio.h>

#define DEBUG 0
#define EndUserModeAddress (*(UINT_PTR*)0x7FFE02B4)

typedef LONG (NTAPI *NTSETLDTENTRIES)(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD);

unsigned long
get_idt_base (void)
{
unsigned char idtr[6];
unsigned long idt = 0;

_asm sidt idtr
idt = *((unsigned long *)&idtr[2]);

return (idt);
}

unsigned long
get_ldtr_base (void)
{
unsigned char ldtr[5] = "\xef\xbe\xad\xde";
unsigned long ldt = 0;

_asm sldt ldtr
ldt = *((unsigned long *)&ldtr[0]);

return (ldt);
}

unsigned long
get_gdt_base (void)
{
unsigned char gdtr[6];
unsigned long gdt = 0;

_asm sgdt gdtr
gdt = *((unsigned long *)&gdtr[2]);

return (gdt);
}

void
test1 (void)
{
unsigned int idt_base = 0;

idt_base = get_idt_base ();

printf ("[+] Test 1: IDT\n");
printf ("IDT base: 0x%x\n", idt_base);

if ((idt_base >> 24) == 0xff) {
printf ("Result : VMware detected\n\n");
return;
}

else {
printf ("Result : Native OS\n\n");
return;
}
}

void
test2 (void)
{
unsigned int ldt_base = 0;

ldt_base = get_ldtr_base ();

printf ("\n[+] Test 2: LDT\n");
printf ("LDT base: 0x%x\n", ldt_base);

if (ldt_base == 0xdead0000) {
printf ("Result : Native OS\n\n");
return;
}

else {
printf ("Result : VMware detected\n\n");
return;
}
}

void
test3 (void)
{
unsigned int gdt_base = 0;

gdt_base = get_gdt_base ();

printf ("\n[+] Test 3: GDT\n");
printf ("GDT base: 0x%x\n", gdt_base);

if ((gdt_base >> 24) == 0xff) {
printf ("Result : VMware detected\n\n");
return;
}

else {
printf ("Result : Native OS\n\n");
return;
}
}

// Alfredo Andr? Omella's (S21sec) STR technique
void
test4 (void)
{
unsigned char mem[4] = {0, 0, 0, 0};

__asm str mem;

printf ("\n[+] Test 4: STR\n");
printf ("STR base: 0x%02x%02x%02x%02x\n", mem[0], mem[1], mem[2], mem[3]);

if ((mem[0] == 0x00) && (mem[1] == 0x40))
printf ("Result : VMware detected\n\n");
else
printf ("Result : Native OS\n\n");
}

void
test5 (void)
{
unsigned int a, b;

__try {
__asm {

// save register values on the stack
push eax
push ebx
push ecx
push edx

// perform fingerprint
mov eax, 'VMXh' // VMware magic value (0x564D5868)
mov ecx, 0Ah // special version cmd (0x0a)
mov dx, 'VX' // special VMware I/O port (0x5658)

in eax, dx // special I/O cmd

mov a, ebx // data
mov b, ecx // data (eax gets also modified but will not be evaluated)

// restore register values from the stack
pop edx
pop ecx
pop ebx
pop eax
}
} __except (EXCEPTION_EXECUTE_HANDLER) {}

#if DEBUG == 1
printf ("\n [ a=%x ; b=%d ]\n\n", a, b);
#endif

printf ("\n[+] Test 5: VMware \"get version\" command\n");

if (a == 'VMXh') { // is the value equal to the VMware magic value?
printf ("Result : VMware detected\nVersion : ");
if (b == 1)
printf ("Express\n\n");
else if (b == 2)
printf ("ESX\n\n");
else if (b == 3)
printf ("GSX\n\n");
else if (b == 4)
printf ("Workstation\n\n");
else
printf ("unknown version\n\n");
}
else
printf ("Result : Native OS\n\n");
}

void
test6 (void)
{
unsigned int a = 0;

__try {
__asm {

// save register values on the stack
push eax
push ebx
push ecx
push edx

// perform fingerprint
mov eax, 'VMXh' // VMware magic value (0x564D5868)
mov ecx, 14h // get memory size command (0x14)
mov dx, 'VX' // special VMware I/O port (0x5658)

in eax, dx // special I/O cmd

mov a, eax // data

// restore register values from the stack
pop edx
pop ecx
pop ebx
pop eax
}
} __except (EXCEPTION_EXECUTE_HANDLER) {}

printf ("\n[+] Test 6: VMware \"get memory size\" command\n");

if (a > 0)
printf ("Result : VMware detected\n\n");
else
printf ("Result : Native OS\n\n");
}

int
test7_detect (LPEXCEPTION_POINTERS lpep)
{
printf ("\n[+] Test 7: VMware emulation mode\n");

if ((UINT_PTR)(lpep->ExceptionRecord->ExceptionAddress) > EndUserModeAddress)
printf ("Result : VMware detected (emulation mode detected)\n\n");
else
printf ("Result : Native OS or VMware without emulation mode\n"
" (enabled acceleration)\n\n");

return (EXCEPTION_EXECUTE_HANDLER);
}

void __declspec(naked)
test7_switchcs ()
{
__asm {
pop eax
push 0x000F
push eax
retf
}
}

// Derek Soeder's (eEye Digital Security) VMware emulation test
void
test7 (void)
{
NTSETLDTENTRIES ZwSetLdtEntries;
LDT_ENTRY csdesc;

ZwSetLdtEntries = (NTSETLDTENTRIES)GetProcAddress (GetModuleHandle ("ntdll.dll"), "ZwSetLdtEntries");

memset (&csdesc, 0, sizeof (csdesc));

csdesc.LimitLow = (WORD)(EndUserModeAddress >> 12);
csdesc.HighWord.Bytes.Flags1 = 0xFA;
csdesc.HighWord.Bytes.Flags2 = 0xC0 | ((EndUserModeAddress >> 28) & 0x0F);

ZwSetLdtEntries (0x000F, ((DWORD*)&csdesc)[0], ((DWORD*)&csdesc)[1], 0, 0, 0);

__try {
test7_switchcs();
__asm {
or eax, -1
jmp eax
}
}
__except (test7_detect (GetExceptionInformation())) { }
}

int
main (void)
{
printf ("\n\n####################################################\n");
printf (":: ScoopyNG - The VMware Detection Tool ::\n");
printf (":: Windows version v1.0 ::\n\n");

test1 ();
test2 ();
test3 ();
test4 ();
test5 ();
test6 ();
test7 ();

printf (":: tk, 2008 ::\n");
printf (":: [ www.trapkit.de ] ::\n");
printf ("####################################################\n\n");

return 0;
}



<ScoopyNG를 이용한 VMM Detection>
1. VMWare (windows xp sp3)에서 돌렸을때
사용자 삽입 이미지


2. Native OS (Windows 7 build 7201)에서 돌렸을때
사용자 삽입 이미지





2009/07/02 16:40 2009/07/02 16:40
Red Pill and More :: 2009/07/02 16:40 Life/School
openclose