기본 콘텐츠로 건너뛰기

lena-tutorial-3

lena tutorial 3 lena tutorial 3은 잔소리 메시지 창을 제거하는 것이다. 프로그램을 실행하면 Remove the nags to register This will make program fully registered :)) 메시지 창을 확인할 수 있다. OK 를 선택하여 메인 프로그램을 확인하고 프로그램을 종료하면 Oops! I am not registered!! 메시지 창을 출력한다. 이 두개의 메시지 창을 제거한 버전을 만들어보자. 먼저 첫 번째 메시지 창을 제거하기 위해서는 GetModuleHandleA 함수의 반환 값이 0이어야 한다. . text : 00401002 call GetModuleHandleA . text : 00401007 mov hInstance, eax . text : 0040100 C cmp eax, 0 . text : 0040100 F jz short loc_401024 그러나 0을 반환한다는 것은 모듈의 핸들을 얻지 못했다는 것이므로 프로그램이 정상 동작하지 않는다. 다시 말해 프로그램이 정상적으로 실행될 경우 반드시 출력되는 메시지 창이라고 이해할 수 있다. 여러 패치 방법이 있지만 여기서는 비교 조건을 변경하는 것으로 (jz -> jnz) 메시지 창 로직을 건너뛰자. . text : 0040100 F jnz short loc_401024 메인 프로그램 메시지 박스 호출(MessageBoxA) 후 종료 시 ExitProcess 함수 수행 전에 있는 메시지 창 생성 로직을 건너 뛰기 위해서 . text : 00401039 jmp short loc_40104D 로 수정하여 패치된 파일을 저장한다. 패치된 파일 실행 시 안내 메시지 창이 제거된 것

lena-tutorial-1

lena tutorial 1, 2 lena tutorial 은 리버스 엔지니어링을 연습하기 좋은 문제들로 구성되어 있어 많은 학습자들이 애용하는 자료이다. 튜토리얼을 실행하면 Evaluation period out of date. Purchase new license 메시지 창이 실행되는 것을 확인할 수 있다. 디버깅 도구를 이용하여 디스어셈블리를 확인해보면 “Keyfile.dat” 파일을 읽으려 한다는 것을 알 수 있다. CODE: 0040105 C push 0 ; hTemplateFile CODE: 0040105 E push offset unk_40216F ; dwFlagsAndAttributes CODE: 00401063 push 3 ; dwCreationDisposition CODE: 00401065 push 0 ; lpSecurityAttributes CODE: 00401067 push 3 ; dwShareMode CODE: 00401069 push 0 C0000000h ; dwDesiredAccess CODE: 0040106 E push offset FileName ; "Keyfile.dat" CODE: 00401073 call CreateFileA CODE: 00401078 cmp eax, 0 FFFFFFFFh CODE: 0040107 B jnz short loc_40109A CODE: 0040107 D

What-is-type-safe?

type safety 란 무엇인가. Basic Type Safety “잘 형식화된 프로그램은 잘못될 수 없다.” 이 구문은 Robin Milner이 1978년 작성한 A Theory of Type Polymorphism in Programming 에서 언급된 말로 Type Safety를 직관적으로 보여줍니다. Going wrong 프로그래밍 언어는 구문과 의미에 따라 정의된다. 모든 언어가 직면한 문제는 구문적으로 유효하지만 의미상으로 문제가되는 프로그램이 많다는 것이다. 영어를 예로 들자면 Chomsky의 “Colorless green ideals sleep furiously”를 볼 수 있는 데, 구문은 완벽하지만 의미가 없다. 다른 예로 OCaml 프로그래밍 언어의 1 + "foo"; 와 같은 구문은 프로그램에서 어떠한 의미도 없다. C언어에서 { char buf[4]; buf[4] = 'x' } 는 인덱스 4에 대한 버퍼 영역을 벗어나고 있으며, 언어적으로 이에 대한 조치가 정의되어 있지 않으므로 의미가 없다고 말할 수 있다. 이러한 무의미한 프로그램을 운영하다면 go wrong 이라 말할 수 있다. Well typed -> Cannot go wrong type-safe language에서 타입 시스템은 올바른 프로그램만 통과시킨다. 특히 우리는 프로그램이 타입 시스템이 허용한 좋은 형식의 프로그램은 type safety를 보장하고 프로그램의 의미가 잘못되지 않을 것이라 생각한다. Which languages are type safe? 이제 인기 좋은 몇몇 언어들이 타입 안전성이 보장되는 언어인지 아닌지 살펴보겠다. 우리는 각기 다른 언어에서 다양한 의미로 적용되고 있는 타입 안전성을 알 수 있다. C와 C++: not type safe. C의 표준 타입 시스템은 버퍼의 끝을 쓰는 것과 같이 일반적 관행을 벗어나는 프로그램을 배제하지 않는다. 따라서 작성된 C 프로그

CVE-2017-8759

CVE-2017-8759 1. 취약 버전 확인은 닷넷 프레임워크 버전으로 진행 닷넷 프레임워크 버전과 공용 언어 런타임 버전은 별개이며 취약점 발생 요인은 닷넷 프레임워크로 닷넷 프레임 워크 버전으로 취약 유무를 판별하면 됩니다. 여기서 런타임은 JVM과 같이 프로그램 구동을 위한 가상의 실행 환경으로 이해하면 될 것 같습니다. 취약점 발생은 닷넷 프레임워크 wsdlparser.cs의 PrintClientProxy()메소드에서 줄바꿈 처리 미흡으로 발생되었습니다. 2. 취약점 동작 방식 닷넷 프레임워크 소스코드 다운로드 URL: https://referencesource.microsoft.com/download.html 먼저 POC 핵심을 살펴보겠습니다. < service name = "Service" > < port name = "Port" binding = "tns:Binding" > < soap:address location = "http://localhost?C:\Windows\System32\calc.exe?011" /> < soap:address location = "; System.Diagnostics.Process.Start(_url.Split('?')[1], _url.Split('?')[2]); //" /> </ port > </ service > 위는 POC 구성 중 원격 서버에서 받아오는 XML 데이터의 일부입니다. 두개의 “soap:address location” 엘리먼트로 구성되어 있는 것을 볼 수 있습니다. 다음은 취약점이 발생한 wsdlparser.cs의 PrintClientProxy()메소드의

CVE-2017-21615_CVE-2017-12616

CVE-2017-21615, CVE-2017-21616 취약점 요약 CVE-2017-12615 영향: 하. 기본 설정 상 PUT 메소드를 허용하지 않으며, 보안 표준을 어기는 사항이므로 발견 시 개선 프로세스 진행. 위협: JSP 업로드. 조건: Tomcat Version 7.0.0-7.0.79에서 PUT Method 허용 상세: PUT 메소드로 서버에 존재하지 않는 “test.jsp”파일 요청을 보낼 경우, 서블릿 컨테이너에서 “test.jsp” 내 정의된 PUT 메소드를 수행하려 하므로 404 Error를 반환한다. 그러나 “/”, “%20”, “:: DATA”와 같은 특수문자를 제거하여 실제 서버에 JSP 파일이 저장된다. 확인 방법: grep -r 'readonly' [톰캣 디렉터리]/conf/web.xml 취약 버전에서 readonly를 false로 정의한 경우 취약 테스트를 위한 web.xml 설정 PUT 메소드가 허용된 톰캣 서버에 curl -X PUT http://TEST.com/test.jsp/ -d "test" 을 전송할 경우, jsp 혹은 jspx 요청이 아니므로 defaultservlet으로 PUT 메소드를 처리하게 된다. 그런데 java.io.Win32FileSystem 의 파일 생성 과정에서 수행하는 파일 명 표준화 시 불필요하게 인식한 특수문자를 제거(‘/’, ‘%20, ‘::$DATA’)함으로써 결과적으로 JSP 파일이 업로드된다. < init-param > < param-name > readonly </ param-name > < param-value > false </ param-value > </ init-param > CVE-2017-12616 영향: 중. 이미지, CSS 파일, JS 파일이 저장된 외부 디렉터리를 연결하는 설정으로 소스 디렉터리(JSP) 이와 같은 방법

Linux-BlueBorne-vulnerabilities

Linux BlueBorne vulnerabilities 리눅스 블루투스 스택(BlueZ)에서 두 개의 보안 취약사항이 발견되었다. 이 취약점들은 2017년 9월 12일자로 공개 되어 BlueBorne 이라는 이름으로 불리고 있으며, 해당 취약점을 보유하고 있는 벤더 사 제품이 존재하여 총 8개의 취약점으로 분류되어졌다. 1) CVE-2017-1000250 이 취약점은 bluetoothd 프로세스에 존재하며, SDP server 요청을 처리하는 과정에서 나타난다. service_search_attr_req (src/sdpd-request.c) 함수에서 sdp 검색 요청 속성을 처리할 때 정보를 유출한다. 이로 인해 희생자 단말 사용자와 상호작용 없이, 어떤 사전의 인증 없이(페어링), 스택의 Service discovery protocol (SDP) server를 엑세스할 수 있다. 이 취약점은 bluetooth 프로세스의 힙으로 부터 정보 유출을 유도할 수 있으며, 여기에는 블루투스 암호 키나 다른 가치있는 데이터가 포함된다. Simple Service Discovery Protocol SSDP(Simple Service Discovery Protocol)은 네트워크 서비스나 정보를 찾기 위해서 사용하는 네트워크 프로토콜이다. SSDP를 이용하면, DHCP나 DNS와 같은 네트워크 서버 혹은 정적인 호스트 설정 없이 이런 일들을 수행할 수 있다. SSDP는 일반 거주지와 소규모 사무 환경에서 UPnP(Universal Plug and Play)를 위한 기본적인 프로토콜로 이미 널리 사용하고 있다. 1999년 MS와 HP가 IETF에 드래프트 했다. IETF제안이 만료된 이후 SSDP는 UPnP 표준에 포함됐다. 이 취약점의 세부사항을 살펴보자. 출처: joinc - SSDP 이 취약점의 세부사항을 살펴보자. - SDP 서버 검색 속성 핸들러( service_search_attr_req, under s

Memory-Layout-of-C

C 프로그램 메모리 구조 C 프로그램 메모리 구조는 일반적으로 다음의 섹션으로 나타낸다. - Text segment - Initialized data segment - Uninitialized data segment - Stack - Heap high address+----------------------+ | |command+line arguments | |and environment variables +----------------------+ | stack | | + | | | | | v | | | | ^ | | | | | + | | heap | +----------------------+ | uninitialized data |initialized to | (bss) |zero bt exec +----------------------+ | initialized data |read from +----------------------+program file | text |by exe