Security

    [Dreamhack] x86 Assembly (2) 정리

    자료구조인 스택, C언어의 함수에 대응되는 프로시저, 시스템콜에 관한 어셈블리 내용이다. 스택 push val : val을 스택 최상단에 쌓음 pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 프로시저 Procedure는 특정 기능을 수행하는 코드 조각을 말한다. 프로시저를 사용하면 반복되는 연산을 프로시저 호출로 대체할 수 있는 장점이 있다. 그리고 기능별로 코드 조각에 이름을 붙여 가독성을 높일 수 있다. 프로시저를 부르는 행위를 호출(Call)이라고 하고, 돌아오는 것을 반환(Return)이라 한다. 프로시저를 실행 하고 나서 원래 실행 흐름으로 돌아와야 하므로 call 다음의 명령어 주소 즉, 반환 주소(return address)를 스택에 저장하고 프로시저로 rip를 이동시킨다. cal..

    [Dreamhack] x86 Assembly (1) 정리

    어셈블리 언어와 어셈블러가 있다. 어셈블러는 어셈블리어 코드를 컴퓨터가 이해할 수 있는 기계어로 코드를 치환해준다. 소프트웨어를 역분석 하기위해, 기계어를 어셈블리 언어로 번역하는 역어셈블러(Disassembler)를 개발했다. 어셈블리 언어는 아키텍처마다 여러 종류가 있다. x64 어셈블리 언어의 기본 구조 구조는 명령어 즉, Operation Code(Opcode)와 피연산자(Operand)로 구성 된다. mov eax, 3 mov는 opcode로 대입하라. eax와 3은 각각 operand1, operand2를 나타낸다. operand1에 operand2를 대입하라는 문장이다. 명령코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add,..

    [Dreamhack] Computer Architecture 정리

    컴퓨터 구조와 명령어 집합구조, 인텔의 x86-64에 대한 내용 정리이다. 컴퓨터 구조 중에서 CPU가 사용하는 명령어와 관련된 설계를 명령어 집합구조(Instruction Set Architecture)라고 한다. 가장 널리 사용하는 ISA 중 하나가 인텔의 x86-64 아키텍처이다. 컴퓨터 구조와 명령어 집합 구조 Computer Architecture란 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법이다. 컴퓨터 구조는 컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. 컴퓨터의 기능구조에 대한 설계란 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에..

    [Dreamhack] Linux Memory Layout 정리

    CPU가 필요한 데이터를 읽고 처리하는데, 연산의 결과를 메모리 다시 적재를 한다. 그래서 CPU의 동작과 메모리 사이의 관련은 크고, 메모리 값의 조작으로 CPU의 잘못된 동작을 유도 할 수 있다. 이 오염된 메모리를 메모리 오염 취약점이라고 한다. (드림핵 커리큘럼에서는 메모리 오염에 관련 취약점을 공부함) 리눅스 프로세스의 메모리 구조 리눅스에서 프로세스는 크게 5가지의 세그먼트(Segment)로 구분한다. 세그먼트 : 적재되는 데이터의 용도별로 메몰의 구획을 나눈 것. 용도별로 나누어, 용도에 맞게 적절한 권한이 부여 되는데, 이 권한은 읽기, 쓰기, 실행이 존재하며, CPU는 이 권한이 부여된 행위만 할 수 있다. 코드(Text) 세그먼트(Code Segment) - 실행 가능한 기계코드가 위치..

    [WEB] Server Side Request Forgery (with Dreamhack)

    웹 개발 언어는 HTTP 요청을 전송하는 라이브러리 제공 PHP : pup-curl NodeJS : http 파이썬 : urllib, requests 이러한 라이브러리는 요청을 보내는 클라이언트 뿐 아니라 서버간 통신을 위해도 사용. 일반적으로 다른 웹 애플리케인션에 존재하는 리소스를 사용하기 위한 목적으로 통신. 웹 서비스의 구성요소가 증가함으로서, 관리 및 코드의 복잡도를 낮추기 위해 마이크로서비스들로 웹 서비스 구현 마이크로서비스는 HTTP, GRPC 등을 사용해 API 통신 마이크로서비스란? 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식이다. API란? API란 Application Program..