반응형
커널 모드 디버거

커널 모드 디버거는 특징 프로세서가 아닌 시스템을 전체적으로 보고자 할 때 사용하는 디버거다. 유저모드 디버거와 달리 커널 모드 지버거는 운영체제에서 실행되
는 하나의 애플리케이션이 아니라 시스템의 커널과 동등한 컴포넌트로 존재해서 전체적인 시스템을 관찰하거나 실행을 중지할 수 있다. 커널 모드 디버거는 일반적으로 
유저 모드 디버깅 기능도 제공한다. 하지만 디버거는 실행되는 프로세서의 간의 메모리 주소 영역이 바뀌는 것을 알아야 하므로 경우에 따라 다소 문제가 될 수도 있다.

커널 모드 디버거는 일반적으로 디바이스 드라이버 개발자와 다양한 운영체제 확장 기능 개발자와 같은 커널 레벨 개발자를 대상으로 만들어졌지만 다른 목적으로도
유용하게 사용할 수 있다. 리버서에게 있어서 커널 모드 디버거는 실행 중인 모든 프로세서와 시스템 전체에 대한 정보를 제공하므로 맏을 수 없을 정도로 큰 도움을
주곤 한다. 사실, 많은 리버서가 커널 모드를 리버싱하든지 유저 모드를  리버싱하든지 상관없이 커널 디버거만을 사용한다. 물론 커널 모드 코드를 리버싱 하는 경우
에는 커널 모드 디버거를 필수적으로 사용해야 한다.

커널 모드 디버거의 강력한 기능 중 하나는 바로 로우레베 브레이크 포인트를 걸 수 있다는 것이다. 특정 연산이 프로그램 내의 어느 부분에서 수행되는지 판단 하고 싶
을 때 가장 흔히 수행하는 방법은 해당 연산을 수행하기 위해서 호출되는 운영체제 API에 브레이크 포인트를 수행하는 코드가 어디인지 알고 싶다면 윈도우를 이동시키는 
시스템 API에 브레이크 포인트를 설정할 수 있다. 하지만 윈도우 창을 이동시키는데 사용할 수 있는 API가 상당히 많고 윈도우 창을 이동시키는 프로세스가 어느 것인지
정확히 알지 못할 수도 있다는 것이 문제다. 커널 디버거는 이에 대한 훌륭한 해결책을 제공한다. 즉 윈도우 창을 이동시키는 운영체제와 로우레벨 코드에 브레이크 포
인트를 설정하는 것이다. 프로그램이 윈도우 창을 이동시키기 위해서 어떤 API를 사용하는지 결국에는 그 작업을 수행하는 운영체제와 로우레벨 코드가 실행된다.

불행하게도 커널 모드 디버거는 설치하기 복잡한 경우가 많다. 그리고 운영체제를 불안정하게 할 수 잇으므로 일반적인 커널 모드 디버거를 위한 전용 시스템을 필요로
한다. 또한 커널 디버거는 하나의 프로세서가 아닌 시스템 전체의 실행을 중지시키므로 커널 디버거가 열려있는 동안에는 시스템이 멈춰있게 되고 어떤 스레드도 
실행되지 않는다. 커널 모드 디버거는 이런 제약 사항으로 인해 유저모드 디버거가 원하는요구사항을 만족시켜주는 한 커널 모드 디버거를 설치하지 말것을 권장한다.
전형적인 유저 모드 리버싱 시나리오에서 과도하게 커널 모드 디버거까지 사용할 필요는 없다.


'Security > Reverse Engineering' 카테고리의 다른 글

Rootkit Detection  (0) 2018.02.16
Reversing(역공학)  (0) 2018.02.16
반응형

lazarus는

sourceforge.net의 오픈소스 프로젝트로서

 

델파이의 오픈소스 버전이라고 할 수 있습니다.

 

이전에는 freepascal 등의 오픈소스 프로젝트가 있었지만

 

Lazarus가 IDE RAD 툴로서는 첫시도라고 봅니다.

(제 주관적인 생각입니다.)

 

델파이를 공부하는 분들에게 많이 도움이 될 거 같네요..^^;

하지만 db활용이라던지, 인디 이용 등에 관해서는 저도 테스트 해보지 않아서

지원이 되는지는 모르겠습니다.

 

앞으로 계속 업데이트 되는 중이니까 많은 기대가 되는 건 사실입니다.

'Programming > Pascal' 카테고리의 다른 글

[Lazarus] 컴파일/빌드 시 실행파일 용량 줄이기  (0) 2022.01.26
[Delphi] Form Caption RandomRange  (0) 2021.12.01
Android freepascal  (0) 2018.02.16
lazarus wiki  (0) 2018.02.16
반응형
웹 프로그래밍의 이해

1)웹 프로그래밍의 의미

 우리가 거의 매일 사용하는 웹은 문자 그림 소리 동영상 등의 다양한 정보를 활용하여 전자 우편이나 자료검색
채팅등을 할 수 있는 인터넷 서비스이다.

 웹프로그램은 웹상에서 다양한 서비스를 하기 위해 만들어진 프로그램으로 웹 프로그래밍 언어를 사용하여 만든다.
웹 프로그래밍 언어를 사용하면 정적인 형태의 간단한 자기소개 웹 문서에서부터 게시판, 쇼핑몰, 영화관과같은 화려하고 동적인 형태의 웹 프로그램까지
다양하게 제작할 수 있다.

2)서버와 클라이언트
웹 프로그래밍을 하려면 먼저 서버와 클라이언트를 이해해야 한다. 서버와 클라이언트의 관계는 고객과 판매자의 관계와 유사한데, 가령 고객이 물건을 사기 위해
상점에 들어가면 고객은 판매자에게 필요한 물건을 요청하고 판매자는 고객의 요청에 따라 물건을 판매하는 것처럼 인터넷을 이용하는 경우에도 똑같은 원리가 적용
된다. 즉 고객에 해당되는 컴퓨터인 클라이언트가 판매자에 해당하는 서버에게 서비스를요청하면 서버는 고객이 요청한 서비스를 처리해 결과를 돌려주는 역할을
담당한다. 이때 서버는 서버가 제공하는 서비스의 종류에따라 웹서버, FTP서버,메일서버 등으로 구분한다.

*FTP서버 : 인터넷에서 컴퓨터 간의 파일을 주고받을 수 있는 서비스를 제공하는 서버

*메일서버 : 인터넷상의 메일을 주고받을 수 있도록 서비스를 제공하는 서버

3)웹 프로그램의 동작 과정

클라이언트와 서버 사이에서 웹 프로그램이 동작하는 과정을 살펴보면 다음과 같다.
1.클라이언트가 서버에게 필요한 서비스를 요청한다.
2.클라이언트의 서비스 요청 내용이 서버에 전달된다.
3.서버는 클라이언트가 요청한 서비스를 처리하여 결과를 클라이언트로 보낸다.
4.클라이언트는 서버가 보낸 서비스 처리 결과를 다운받아 웹 브라우저라는 소프트웨어를 이용해 확인한다.


웹브라우저 : 클라이언트 컴퓨터의 창이라고 할 수 있으며, 웹서버가 보내준 결과를 해석하여 클라이언트에게 보여준다.

웹 서버 : 웹 브라우저의 요청을 받아드리고, 요청된 웹 문서의 처리, 결과를 다시 웹 브라우저에게 알려 준다.

Ⅱ.웹 프로그래밍 언어

웹 프로그래밍 언어는 단순히 보여 주기만 할 수 있는 문서 작성용 HTML에서부터 동적인 기능과 상호 작용을 가능하게 하는 여러 가지 언어로 발전해왔다.
이러한 웹프로그래밍 언어에는 클라이언트 측에서 실행되는 프로그램을 만드는 언어와 서버 측에서 실행되는 프로그램을 만드는 언어로 분류한다.

클라이언트 측 언어란 사용자의 웹 브라우저에서 실행되는 웹프로그램을 만드는 언어로, HTML,자바스크립트,VB 스크립트 등이 있다.이러한 클라이언트 측 언어로
작성된 웹프로그램은 사용자가 요청한 서비스가 클라이언트로 모두 다운로드된후 클라이언트에서 실행되기 때문에 서버에 부담을 주지 않는다.

서버측 언어란 클라이언트의 요구에 의하여 서버에서 실행되는 웹 프로그램을 만드는 언어로, 로그인 처리, 게시판사용,예매 확인 등 양방향 으로 동작하는 프로그램
을 만드는데 사용되며, JSP,ASP,PHP등의 언어가 있다.

보통 웹 프로그래밍 언어라고하면 서버 측 언어를 의미한다.

HTML : 웹문서를 만드는데 사용되는 가장 기본적인 언어로,마크업언어(인터넷용 언어처럼 생각되는 경우도많지만, 논문 등의 문서구조를 나타내기위해서 만들어진 언어)
의 기본적인 기능에 하이퍼텍스트(사용자가 비순차적인 검색을 할 수 있도록 제공되는 텍스트,문서속의 특정 자료가 다른 자료나 데이터베이스와 연결되어있어
쉽게 원하는정보를 얻을수 있는것) 기능을 추가하였다. HTML은 정적인 문서를 만드는데 주로 사용한다.

자바스크립트 : 정적인 HTML에 동적인 기능을 추가하기 위해 개발한언어로,동적인 웹 문서 작업에 필요한 다양한 기능을 제공한다. 특정 운영체제에 대하여 제한은
받지 않지만, 채팅 사이트나 게임 등의 고급프로그래밍 작성은 불가능하다.

VB스크립트 : 인터넷 익스플로러의 기본 스크립트 언어로, 비주얼 베이직의 일부 기능을 웹 환경에서 사용할 수 있또록 하여 배우기가 쉬어 빠른시간안에 프로그램을
작성할 수 있다. 그러나 인터넷 익스플로러 이외의 웹브라우저에서는 거의 지원되지않는다는 문제점이있다.

JSP : 자바언어를 기본 문법으로 한 웹 프로그래밍 언어로, 특정 하드웨어나 운영체제상관없이 실행이가능하며 클라이언트에게 결과를 보여주는 부분을 분리하여 작성
할수 있어서 효율적인 작업이 가능하다.

ASP : 윈도 운영 체제에서 실행되는 언어로, 비주얼 베이직 언어를 기본 문법으로 사용한다.

PHP : c언어, 자바와 비슷한 문법 구조를 가지고 있으며, 적은 명령어로 웹프로그래밍이 가능하기 때문에 편리하다. 또 다양한 운영체제에서 사용이 가능하며,
데이터베이스를 활용할 수 있는 기능을 갖추고 있다.

Ⅲ.웹 사이트 개발 과정의 이해
웹사이트는 HTML, 자바스크립트, JSP, ASP등의 웹 프로그래밍 언어와 데이터베이스 프로그램, 기타 멀티미디어 자료등을 이용하여 만들어진다. 웹사이트의
기본적인 계획을 세운 후에 그 계획에 따라 체계적으로 제작되어야 한다. 
웹사이트 개발 과정은 보통 7 단계를 거치게 되는데, 단계별 작업 내용은 다음과 동일하다.

계획수립 → 분석 → 콘텐츠구성 → 정보설계 → 디자인 → 개발,제작 → 테스트,업로드


반응형
루트킷 탐지

루트킷 탐지(Rootkit Detection) 툴을 설명하려면 먼저 루트킷이 무엇이고 얼마나 많이 퍼지고 있으면 루트킷
만 탐지하는 툴이 따로 나왔을가하는 점을 먼저 이해해야 한다.

루트킷은 해커들이 컴퓨터나 네트워크에 침입한 사실을 숨긴 채 관리자용 접근권한을 획득하는데 사용하는
도구,즉 프로그램의 모음이다. 칩입자는 먼저 알려져 있는 시스템 취약점을 찾아내거나 암호를 크래킹하는 등의
방법으로 사용자용 접근 권한을 획득한뒤, 컴퓨터에 루트킷을 설치한다. 루트킷은 네트워크 상의 다른 컴퓨터에 있는 
사용자 ID와 암호들을 수집함으로써, 해커에게 루트 권한이나 기타 특수한 접근 권한을 제공한다. 
루트킷은 또한 해킹 탐지를 교묘하게 회피하기 위해 다음과 같은 일을 하는 유틸리티 프로그램들로 구성
될 수 있다.

* 트래픽이나 키스트로크를 감시

*해커가 이용할 목적으로 시스템 내에 백도어를 만듦

*로그 파일 수정

*네트워크상의 다른 컴퓨터들을 공격

*기존 시스템 도구들을 수정

kit이라는 이름이 붙었다고 해서 특별히 어떤 구성이 정해져 있는 것은 아니다.

루트킷 분야만 가지고도 상당히 범위가 넓으므로 여기서는 루트킷을 탐지'제거하는 툴 소개 정도로 정리하
려고 한다. 책에서 소개하는 루트킷 외에도 다른 툴들은 많이 있다. 각각 의 툴들은 보유한 패턴들이 다르므
로 필요할 때가 있을 수 있으니 알아두도록 하자.

IceSword

IceSword는 한국말로 하면 얼음 칼이며, 대단히 강력한 안티 루트킷이다. 제작자가 중국인인데, 외국의
한 기사에서 자신이 루트킷에 걸려서 곤란했던 적이 있어서 스스로 치료해보자는 의미로 만든 것이라고 한다.

IceSword는 실제 경험에 의한 루트킷 분석을 목적으로 만들어졌기 때문에 타 업체에서 만든 루트킷과는
다른성격을 가지고 있다. 기업에서 제작된 안티 루트킷과는 달리 파일을스캔하는 과정이 없으며, 대신에 다양한 
시스템 상태 보기를 제공함으로써 루트킷의 제거를 유도한다. 물론 이것을 다 알고 처리하기 위해서는 많은
학습이 선행되어야 하며 별도의 백업을 하는 방법이 존재하지 않기 때문에 특히 더 많은 주의가 필요하다.

중국 개발자가 자신의 블로그에서 배포중인 툴인 만큼 기업체에서 제공하는 패턴처럼 자주 업데이트가 되지
는 않지만, 루트킷 탐지 분야에서는 최고의 툴로 찬사를 받고 있는 툴이다.

매우 강력한 삭데와 접근 방법 제공을 통해 자동 스캔하는 것 그 이상의 성과를 얻을 수 있도록 구성
되어있다. 간략하게 각각의 기능에 대해서 알아보자.

Process : 현재 실행 중인 프로세스 목록을 보여주며, 장치 관리자에서는 볼 수 없는 숨겨진 프로세서
까지 볼수 있다.

Port : 네트워크의 연결 상태를 보여준다. 연결된 포트들을 확인하여 기본적으로 허용한 포트가 아니라면,
이를 통해 어느 위치에 문제의 파일이 작동중인지 알 수 있다.

Kernel Module : 실행 파일에 의해 로드된 시스템파일(.SYS)이나 동적 라이브러리 파일(.DLL)의 목록을 보여준다.
대부분의 루트킷은 자신을 은폐하기 위해 SYS나 dll파일을 몇개 심는데, 그 목록을 볼 수 있게 해준다.

Startup : 실행 파일에 있는 목록을 보여주며, 시작 지점에 있는 레지스트리의 목록을 보여준다.

Win32 Services : 서비스로 실행되는 프로세스 목록을 보여준다. 유명한 루트킷의 경우에는 IceWord가 자동으로
빨강색으로강조하고, 일부 루트킷의 경우에는 자동 탐지가 안되므로 사용자가 직접 판단을 해야한다.

SPI(Service Provider Interface) :  네트워크 드라이버에 로딩되거나 영향을 미치는 부분을 보여준다.일부
루트킷의 경우 winsock을 이용하여 특정 네트워크 패킷을 캡쳐하는 기능을 갖고 있기 때문에 이에 대한 점검
방법으로 사용할 수 있다. ARP가 이상한 시스템의 경우 대부분 이곳에 문제가 있는 시스템이 많다.

BHO : 브라우저나 시스템의 쉘 실행시 로딩되는 DLL들의 목록이다. 이부분읜 Iceword가 아닌 툴들도 비슷한 결과를
얻을 수 있다.

SSDT : 시스템의 메모리를 참고할 수 있게끔 하는 부분이다. 이미 다른 곳에서 결과를 얻을 수 있기 때문에
자주 볼 필요는 없지만, 앞에서 나열한 모든 기능으로 잡을 수 없는 경우 이곳에서 실행중인 메모리를 봄으로써 답을 찾는 경우가 있다.

Message Hooks : 프로그램 동작시 입출력 장치의 반응을 보여준다. 이역시 자주 쓰인 다고는 할 수없지만,
키 로거가 의심되는 경우 이곳에서 손쉽게 잡을 수 있다.

Log process/ Therad Cration : 어떤 프로세서가 어떤 것을 실행하는지를 보여주는 부분으로 IceWord가 실행중인 경우에만 프로세서
의 기록을 남기며, 주로 주기적인 프로그램이 돈다고 의심될 때 이부분을 확인하면 유용하다.

scan Modules Hooks : 모듈들을 검사하여 특정 프로세서나 파일을 모니터링 할 수 있다. 이기능을 사용하면
꽤 많은 부하가 잇으므로 사용에 주의가 필요하다.

Registry :  윈도우의 일반 레지스트리 편집기인 regdit.exe로는 접근할 수 없는 부분까지 아무 제재 없이 접근이
가능하다.

File : 파일 탐색기로써 숨긴 폴더 ' 파일을 포함하여 시스템 폴더 ' 파일까지 모두 볼 수 있으며, 강제 삭제도 가능하다.
어떤 제재도 가하지 않고 접근이 가능하므로 사용시 주의하기 바란다.


'Security > Reverse Engineering' 카테고리의 다른 글

커널 모드 디버거  (0) 2018.02.16
Reversing(역공학)  (0) 2018.02.16
반응형

 리버스 엔지니어링이란, 어떤대상이 동작하는 원리를 알아보기 위해 그 속을 뜯어보는 기법을 말한다. 게임 해커들의 커뮤니티는 게임 클라이언트 프로그램을 리버스 엔지니어링하는데 대해 상당한 관심과 노력을 쏟고 있으며, 게임 클라이언트와 게임 서버간의 통신에 대해서도 지대한 관심을 보이고 있다. 게임 클라이언트 로직과 데이터 구조를 알아내는 것은 실제 게임동작에 관한 심도 있는 이해는 게임 해킹 툴을 만드는 초석이 된다.

 이 카테고리에서 선보일 기법은 우리가 어떤 신작 게임을 파고들던지 간에 어차피 미리 배워 놓아야할 기술들이다. 항상 새로운
MMO 게임이 출시되고 있긴 하지만, 그 각각의 게임은 이 책을 통해 언급한 보안 문제를 똑같이 겪게 될 것이다. 여기 소개되는 기법과 취약점은 어느 한 게임에 종속되는 것이 아니기 때문이다.

몇몇 테크닉의 경우에는 더 그렇다. 리버스 엔지니어링만해도 우리가 어떤 새로운 게임의 에물레이션 서버를 만들어보고자 한다면 꼭 필요한 기법이다. 게임 클라이언트와 중앙 서버간에 사용되는 네트워크 프로토콜을 완전히 이해할 수 있다면 우리들만의 서드파티 서버를 만드는 것도 가능하다. 일단 리버싱을 완전히 이해한 뒤에는 스니퍼나 패킷 인젝터, 봇뿐만 아니라 클라이언트 상태값 조작 해킹 툴 등의 것을 만들 수 있게 된다.

결로은 리버스 엔지니어링을 통해 게임 클라이언트의 논리적인 구조를 알아볼 수 있고, 객체 들이 어떤 식으로 조직되어 있는가와 또 어떻게 다루어지는지, 어떤 코드가 무엇을 하는지 밝혀낼 수 있다는 것이다.

'Security > Reverse Engineering' 카테고리의 다른 글

커널 모드 디버거  (0) 2018.02.16
Rootkit Detection  (0) 2018.02.16

+ Recent posts