WSL 활성화 ↔ VT-x/EPT or AMD-V/RVI 활성화 전환

WSL 활성화해당 VM이 위치한 폴더의 .vmx 파일 >다음 라인 추가: hypervisor.cpuid.v0 = "FALSE" windows 기능 켜기/끄기 >"Hyper-V"와 "Windows Subsystem for Linux" 켜기 VMware Workstation >Edit > Preferences > Display tab > "Accelerate 3D graphics" 활성화Settings > Processors tab > "Virtualize CPU performance counters"와 "Virtualize Intel VT-x/EPT or AMD-V/RVI" 끄기 관리자 권한으로 PowerShell >dism.exe /online /enable-feature /featurename:Virt..

기타 2024.07.23 0

VMware Ubuntu 브릿지 설정 방법

나는 host machine = Windows 11, guest virtual machine = Ubuntu 22.04였다. 1. (확실치는 않지만) host machine에서제어판 > 네트워크 및 공유 센터 > 어댑터 설정 변경 > 현재 연결된 것 우클릭 > 속성 > VMware Bridge Protocol 체크 2. host machine에서VMware Workstation 열기 > 해당 virtual machine의 Settings > Network Adapter > Network connection 섹션에서 Bridged 선택  3. 해당 virtual machine 들어가서아래 명령어 실행ip addr 만약 거기서 ens33에 "DOWN"으로 되어있다면 -> 아래 명령어 실행sudo ip lin..

기타 2024.07.20 2

[가상화] KVM과 Qemu 비교, Fuzzing 환경 조성

KVM vs. Qemu Type?Hypervisor는 Type 1과 2로 나뉘며, Type 1에는 KVM과 Hyper-V,Type 2에는 Qemu 등이 있다. Emulator? ▶Qemu는 Emulator이기도 함 ※ Emulation:호스트 머신에는 없는 하드웨어를 소프트웨어로 구현하고 Binary Translation을 수행함 -> 가상머신 입장에선 마치 그런 물리적 환경에 있다고 느낌eg. 오락실 게임을 컴퓨터에서 구현할 때, 오락실 게임기의 하드웨어는 소프트웨어로써 구현 (Emulation)됨 ※ Binary translation:서로 다른 아키텍처를 가진 가상 머신과 호스트 머신 간의 명령어를 번역 eg. QEMU는 가상머신에서 생성된 ARM 기반의 명령어를 x86 기반 명령어로 번역 ▶KVM은..

기타 2024.07.16 0

[Windows test mode]

>> Test mode (Test Signing Mode) 신뢰할 수 있는 certificate authority(Microsoft 등)가 전자서명해주지 "않은" driver/system file들도 설치/실행 할 수 있다. >> Test mode 끄고 켜는 방법 1. secure boot 해제 test mode의 on off는 secure boot이 해제된 상태에서만 가능하므로 해제한다. 노트북 켠 뒤, 부팅 다되기 전에 F8 눌러 Advanced startup options 진입 > Troubleshoot 클릭 > Advanced options 클릭 > UEFI Firmware Settings 클릭 > Boot > Secure boot control (삼성 노트북 기준) 2. test mode on/..

기타 2024.07.15 0

[System Hacking] out_of_bound

>> 소스코드 >> 메모리 구조 higher.. --stack-- Return addressold EBP [ebp]push ecx [ebp - 4]? [ebp - 8]? [ebp - 12]idx값 [ebp - 16] -- stack-- namecommand lower.. Q. idx의 주소는 어떻게 알았는가?A.소스 코드를 보면 idx는 scanf()의 두번째 argument로 입력되므로,어셈블리에서 scanf()가 호출되기 전 부분을 보고, 그 순간에 stack에 push되는 걸 보자.   0x08048723 :    lea    eax, [ebp-0x10]    0x08048726 :    push   eax    0x08048727 :    push   0x8048832    0x0804872c :..

Wargame 2024.07.10 0

[Web Hacking] file-download-1

>> 소스 코드 upload 과정에서는 filename에 ".."가 들어가는지 점검한다. 그러나 download 과정에서는 filename에 ".."가 들어가는지 확인하지 않는다.  >> exploit 소스코드를 보면,업로드되어있는 파일을 읽기 위해서는/read에 "name" parameter를 전달해야 한다. 실제로 업로드&read 테스트를 해봐도,http://host3.dreamhack.games:21074/read?name=mytitle로 접속하게 됨을 확인할 수 있다. 즉, http://host3.dreamhack.games:21074/read?name=☆로 접속함으로써, ☆ 파일을 읽는 것이다. 그러므로, 만약 공격자가 상위 디렉토리의 flag.py를 읽고 싶다면,☆ 자리에 ../flag.py를..

Wargame 2024.07.09 0

[Web Hacking] image-storage

>> 소스코드 분석  # list.phpline 26~32의 php에 의해,현재 위치 아래의 uploads 폴더 내 파일들(중 .., ., index.html는 제외)의 list가 출력된다. # upload.php※ move_uploaded_file(A, B): 파일 A가 php의 HTTP POST 방식으로 업로드 되었는지 확인한 뒤 B로 옮김 이용자는 http://host1.dreamhack.games:[PORT]/uploads/[FILENAME] URL을 통해 파일에 접근 가능   >> exploit # 공격자는 뭘 할수 있는가? 어떤 파일이든 서버에 올릴 수 있다. # 그 파일로 뭘 수행해야 하는가? 이 파일이 실행됨으로써,서버가 "cat /flag.txt" 명령어를 실행하고 그 결과를 브라우저에 ..

Wargame 2024.07.08 0

[Heap] chunk의 구조, free list, malloc(), free()

heap은 variable size memory로서, 프로그램이 실행되는 도중 동적으로 할당/해제되는 메모리 영역이다.malloc()으로 allocate되고 free()로 deallocate된다. chunk의 구조header + chunk header8byte  chunk chunk는 사용되고 있을 때와 free된 때의 모습이 아래처럼 다르다.   free chunk의 double-linked list free chunk끼리는 double-linked list로 이어져 있다.(그림 상에는 single-linked처럼 그려져있지만 아무튼 실제로는 double-linked이다.)  포인터 관계를 자세히 보면 아래와 같다.  malloc()malloc(100)을 통해 chunk를 생성하면 아래와 같이 되며 1..

[File System] LFS(Log-structured File Systems)

Sequential Write: 모든 update는 disk에 sequential하게 write한다.: data block을 disk에 write할 때, sequential하게 Inode와 Inode map도 disk에 write한다.  다만 Sequential write만으로는 최대로 effective하지는 않아서, write buffering 방식도 활용한다. Write buffering: one large write : disk에 write하기 이전에, LFS는 메모리의 update를 추적하고 있다가,그러한 update가 충분한 개수가 모이면 (이것이 segment이다),이들을 disk에 "한꺼번에" write함으로써, disk의 활용이 좀더 효율적이게 된다. ▶example개별 update는 두번..

[File System] Crash Consistency: FSCK and Journaling

💡write() 이후 과정과 crash workload example사용자가 write()를 호출함으로써 이미 있는 파일에다가 data block 하나를 추가하는 workload에서는Data block 추가, Inode 업데이트, Data bitmap 업데이트가 이뤄져야 한다.이들은 disk로 바로 write되지 않고, 일단 main memory의 page cache나 buffer cache에 있다가, file system이 최종적으로 disk로의 write를 결정하면 그때 disk로 write된다. crash cases그럼 crash 상황이란 즉, 위 3개 중 0개 or 1개 or 2개 성공의 상황일 것이다.이중 애매하게 1개 or 2개만 성공하는 경우 뭔일이 나는지 살펴보자. ▶1개만 성공여기에도 ..

[File System] FFS(Fast File System)

이전 방식 (VSFS)의 문제점VSFS는 disk를 random access memory로서 다뤘기에, 데이터가 여기저기에 퍼져버림. 이 때문에,한 파일의 inode와 data block이 너무 멀리 있어서,파일의 inode를 먼저 읽고 이후에 data block을 읽는 아주 일반적인 동작마저도 상당히 expensive함. 또한, 논리적으로는 연속적인 하나의 파일인데도 물리적으로는 분산돼있을 수 있어서 (아래 그림 참고),sequential read/write가 불가능하고 disk를 앞뒤로 왔다갔다해야 하니, 성능이 매우 떨어짐. 따라서,disk 내의 데이터 구조를 어떻게 organize해야 성능을 높일 수 있을지가 문제였다. FFS의 Cylinder groupFFS는 disk의 물리적 특성을 고려한다...

[Meltdown and Spectre] 엎질러진 물

💡Meltdown: 비순차실행을 이용해, user application 주제에 kernel 데이터를 읽는 공격  발생 원리✅1: user mode application이 커널 영역의 메모리 주소에 접근 시도 예시 1예시 2ptr: kernel 영역의 주소. ✅2: 비순차실행1.에 의해 아래 과정이 일어나야 한다.i) 가상 주소의 Address translation: 가상 주소인 (kernel)을 물리 주소로 변환ii) PTE 로드: 주소 변환을 위한 Page Table 참조iii) permission check: 해당 물리 주소에 접근 권한이 있는지를 PTE의 권한 정보를 바탕으로 체크    -> 권한이 없네! -> page fault exception 그런데 이것은 시간이 한참 걸리므로,비순차실행에 ..

하드웨어 보안 2024.06.12 0

[Malware: Malicious Software] Type, History, Detection, Trend

Malware types Virus: OS 등 host에서 target file (일반적으로 실행파일)을 찾아 자기 자신의 복사본을 삽입하여 전파하는 코드 조각 * virus의 주요 위치: - Boot sector -> 다른 어떤것보다도 먼저 control 능력을 가짐  - Memory resident - Applications, macros, data, etc. - Library routines - Compilers, debuggers, virus checker, etc. * 독립적으로 실행될 순 없고, host 프로그램이 이것을 실행하게 해야 실행됨* target file이 실행되면 virus도 실행되기 시작 * 오염된 file이 machine에서 machine으로 이동할 때에만 퍼짐 Worm: 어떤..

시스템 보안 2024.06.11 0

[Server Side Request Forgery (SSRF)]

Server Side Request Forgery (SSRF): 서비스 간 HTTP 통신이 이뤄질 때, 외부에 있는 공격자의 입력값이 요청 내에 포함됨으로써 요청이 조작되면, 웹 서비스의 권한으로 전송되어, 간접적으로 내부망 서비스를 이용   웹 개발 언어는 HTTP 요청을 전송하는 라이브러리를 제공한다.PHP의 php-curl, NodeJS는 http, 파이썬은 urllib, requests이러한 라이브러리는 HTTP 요청을 보낼 클라이언트 뿐만 아니라 서버와 서버 간 통신, 또는 다른 웹 애플리케이션에 존재하는 리소스를 사용하기 위한 목적의 통신에 쓰인다.eg. 마이크로서비스 간 통신, 외부 API 호출, 외부 웹 리소스 다운로드  ※ 마이크로서비스최근의 웹 서비스는 단일 서비스로 구현되지 않고 마이..

웹 보안 2024.06.08 0

[File Upload/Download Vulnerability]

File Upload Vulnerability: 공격자가 원하는 파일 / 악성 확장자를 갖는 파일을 서버의 파일 시스템 상 임의 경로에 업로드  1. Path Traversal 이용 공격 ▶ 취약한 코드>> 파일 업로드 기능에 Path Traversal 취약점이 있는 웹 서비스 코드from flask import Flask, requestapp = Flask(__name__)@app.route('/fileUpload', methods = ['GET', 'POST'])def upload_file(): if request.method == 'POST': f = request.files['file'] f.save("./uploads/" + f.filename) return 'Upload Success' ..

웹 보안 2024.06.08 0

[Command Injection] 발생 원리, exploit 예시, 예방

Command Injection: 시스템 명령어를 실행하는 함수에 이용자가 입력을 통해 임의의 인자를 전달할 수 있을 때 발생- 공격에 사용되면 웹 애플리케이션에 임의 명령어를 실행할 수 있어 공격 파급력이 높음인젝션(Injection): 악의적인 데이터를 프로그램에 입력하여, 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법- 웹 애플리케이션을 대상으로 하는 인젝션 공격은 SQL Injection, command injection 등이 있음  발생하는 이유웹 애플리케이션을 개발하다보면, 어떤 기능에 대해서는 스스로 코드를 작성하기보다 이미 설치된 소프트웨어를 사용하는 것이 편리할 때가 있다. 업로드 디렉토리에 있는 파일들의 이름을 출력하는 웹 애플리케이션을 만든다고 할 때, 디렉..

웹 보안 2024.06.08 0

[No SQL Injection] Simple Injection, Blind Injection

NoSQL Injection: 이용자의 입력값이 쿼리에 포함되어, 이용자가 원하는 요청을 실행하는 취약점 ㅡ SQL Injection과 공격 목적 및 방법이 매우 유사 SQL과 달리, NoSQL은 사용하는 DBMS에 따라 요청 방식과 구조가 다른데이 글에서는 MongoDB에서의 NoSQL Injection만 알아볼 것임 MongoDB에서는 SQL이 저장할 수 있는 데이터의 자료형인 문자열, 정수, 날짜, 실수 외에도 오브젝트 타입을 사용할 수 있는데,오브젝트 타입의 입력값을 처리할 때에는 쿼리 연산자를 사용할 수 있어,이를 통해 다양한 행위가 가능 >> Node.js의 express 프레임워크로 짜인 소스코드 예시const express = require('express');const app = expr..

웹 보안 2024.06.08 0

[SQL Injection #1] Simple Injection, Blind Injection

SQL InjectionDBMS의 SQL 쿼리에 임의의 입력값을 넣어 쿼리를 조작하여, 인증을 우회하거나 데이터베이스 정보를 유출하는 공격- SQL을 이해하고 있다면, 모든 RDBMS에 대해 SQL Injection 가능SQLDBMS에 데이터를 질의하는 언어Injection이용자의 악의적인 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석되어 발생하는 취약점 예시 상황웹 서비스 내에,로그인을 위해 아이디와 비밀번호를 입력받고, 이를 DBMS에 조회하기 위한 쿼리에 포함하여 쿼리를 실행하는 페이지가 있다 하자.  이때 user_table은 아래와 같다. 정상적인 쿼리아이디와 비밀번호 칸에 정상적으로 각각 dreamhack, password를 입력하면 쿼리는 아래와 같이 생성된다. 쿼리 설..

웹 보안 2024.06.08 2

[Cross Site Request Forgery (CSRF)]

CSRF는 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 클라이언트 측 취약점이다.  웹 서비스 예시 소스 코드이용자로부터 예금주와 금액을 입력받고 송금을 수행한다. 이때 계좌 비밀번호, OTP 등을 사용하지 않기 때문에,로그인한 이용자는 추가 인증 정보 없이 해당 기능을 이용할 수 있다. 송금 요청이 담긴 request는 아래와 같다.  1.attacker는 페이지에 악성 스크립트를 심고, 여기에 victim(정상 이용자)이 접속하도록 / 값을 입력하도록 유도한다.  eg) 악성 스크립트가 담긴 글을 게시판에 작성 악성 스크립트: HTTP request를 보내는 코드- HTML 또는 Javascript를 통해 작성할 수 있음 HTML을 통한 공격 코드 예시태그를 사용해 HTTP 요청..

웹 보안 2024.06.08 0

[Heartbleed Attack] TLS Record Protocol, Heartbeat Protocol, Heartbleed Attack

TLS▶TLS layer• Application layer→TLS: unprotected data 전송됨• TLS: handles encryption, decryption, integrity checks 수행• TLS→Transport layer: protected data 전송됨 ▶TLS Record ProtocolTLS handshake가 끝나면 client와 server는 header와 payload로 구성된 record를 이용해 데이터를 교환한다. Record Sending Data Receiving Data ▶Hearbeat protocol in OpenSSLclient와 server가 일정 기간 이상 서로에게 데이터를 보내지 않으면 통신을 막음으로써,TLS의 keep-alive feature을..

시스템 보안 2024.06.07 0

[Cache Side-channel Attacks] Cache, Flush+Reload, Prime+Probe, Countermeasure

배경지식: Cache Locality: 프로그램이 실행되는 동안 주소 공간의 일부분만을 집중적으로 접근하는 경향▶Temporal locality: 최근에 access된 것은 곧 다시 access될 확률이 높다- 따라서 최근에 접근된 데이터를 프로세서 가까이에 유지하면 성능 향상됨 eg. 반복문 안에서는 동일한 명령어가 반복적으로 실행되기 때문에, 해당 명령어는 다시 접근될 확률이 높다.▶Spatial locality: 최근에 access된 것 가까이에 있는 것은 곧 access될 확률이 높다 메모리의 연속적인 주소 공간이 자주 함께 사용되는 경우가 많기 때문 - 따라서 연속된 데이터 블록을 메모리의 상위 수준으로 옮기면 성능 향상됨eg. 배열은 메모리에 연속적으로 저장되며, 배열의 요소들이 순차적으로 접..

하드웨어 보안 2024.06.07 0

[File System] VSFS(very simple file system)

overall organization▶block: 위 사진에서 각각의 작은 네모 하나. 4kB  ▶Data region: user data 저장  ▶Inode: 파일의 주요 metadata 정보 (파일이 나뉘어있는 data block이 어떤건지, 파일 크기, 소유자, 파일에 대한 접근 권한과 접근/수정 시간 등)를 track하기 위해 이들이 저장된 곳- inode number에 의해 위치가 계산되어 refer- 위 사진의 Inode table에서 주황색 네모 하나. 256B- 위 사진 기준으로는 Inode가 총 80개이므로, 가능한 최대 파일 개수도 80개이다. ▶Inodes(Inode table): Inode의 array임 ▶Bitmap: Inode나 Data block의 free(0) / alloca..

[File System] File & Directory, Hard link & Soft Link

File: byte의 선형 배열임  - low-level filename: inode number create와 remove▶create- fd: fild descriptor - 정수값임  ▶remove  offset: read/write을 시작할 파일 내 위치 ▶offset에 영향을 주는 함수- read()- write()- lseek(): read/write offset을 재설정  ▶traces example write()와 fsync()▶write(): 데이터를 우선 메모리 버퍼에 write하고, '나중에' disk로의 업데이트 ▶fsync(): 즉시 disk에 write함   fork()와 dup()▶fork()- child process는 parent process의 file descriptor..

[Secondary Storage] HDD(Hard Disk Drives), RAID(Redundant Array of Inexpensive Disks)

HDD Basic geometryTrack skewtrack 경계를 건너갈 때일지라도 연속적 read (여러개의 sector read)가 잘 수행되도록.track skew의 원리가 지하철 환승의 매커니즘과 같다는 생각이 들었다.내가 1호선에서 2호선으로 갈아탄다 치자.1호선에서 내린 뒤 2호선이 너무 곧바로 오면,그 열차는 놓치게 되고, 결국 다음 열차를 위해 배차간격을 거의 통으로 기다려야 한다.반면, 만약 2호선이 곧바로가 아니라, 아주 센스있게 "내가 1호선에서 2호선으로 걸어갈 여유가 있도록" 약간 딜레이를 두고 와준다면,나는 2호선 열차를 안전하게 탈 수 있다! 만약 disk가 아래와 같고, 22번과 34번 sector를 순서대로 read하려 한다 치자.22번을 읽은 뒤, head가 34번으로 ..

[I/O Devices] I/O Bus, Canonical device, Polling & Interrupt, DMA, MMIO

system architectureBus: data path ▶1. Memory bus: CPU ↔ memory ▶2. I/O bus: CPU ↔ I/O devices- USB(Universal Serial Bus): univsersal- SCSI, SATA: hard disk만을 위한 bus. - PCIe: 요즘에 device들은 SCSI, SATA 대신 이걸 많이 사용 canonical device ▶interfaceOS는 세 register를 read/write함으로써 device의 작동을 컨트롤함. 여기 구조는 device끼리 거의 비슷함 - status register: device의 현재 상태 - command register: device가 특정 task를 수행하도록 함 - data regi..

[논문] Improving Performance of Autoencoder-Based Network Anomaly Detection on NSL-KDD Dataset

연구 배경Internet에 연결된 device들이 많아짐에 따라 (IoT device) 보안 문제가 점차 대두되고 있어, 네트워크 보안을 위한 안정적 해결책이 요구된다.요즈음에는 여기에 AI의 활용이 제안되고 있으며, AutoEncoder 모델을 활용한 deep learning method는 거대한 네트워크 트래픽 샘플 상에서 anomaly를 탐지하는 task에 많이 사용되고 있다.AutoEncoder는 unsupervised feed-forward neural network이며, input의 reconstruction을 주요 목적으로 한다. 그리고 그 구조는 input - hidden - outptut layer로 대칭적이다. 또한 가장 적은 neuron을 가진 hidden layer를 latent s..

인공지능 2024.05.31 0

[Memory management] Swapping

💡SwappingOS가 memory의 address space 중 현재 그닥 필요하지 않은 부분 (page)을 hard disk drive에 보관해둠으로써,  memory 공간의 부족을 완화하는 것이다. swap space: main memory에 있던 일정한 크기의 page들이 disk 내로 옮겨지는 공간  - 이 공간은 page 단위로 구획돼있어야 한다.  Present Bit in PTE(Page Table Entry) 👇present bit page fault와 page replacement ▶Page fault: physical memory에 존재하지 않는 page에 접근하려 할 때 발생 ▶Page replacement아래 순서로 일어난다.1.load instruction이 수행됨 2. pr..

[Shellshock attack] environment variable, bash, parse_and_execute()

Shell function을 child process에게 전달하는 방법▶Shell function 예시 ▶방법 1. parent shell에서 "함수" 형태를 가진 환경 변수를 정의한다.(정말 함수로서 정의됐는지 보려고 declare -f로 확인해 보았을때 정상적으로 함수 코드가 보이며, 함수를 실행하면 제대로 작동한다.) 이제 export -f로 함수를 export하고, child shell을 실행하면, child shell은 함수를 잘 전달받았다. (정말 잘 전달받은지 보려고 다시 declare -f로 확인해 보았을 때 정상적으로 함수 코드가 보이며,함수를 실행하면 제대로 작동함) ▶방법 2.parent에서 (이 방법에서는 parent가 꼭 shell이 아니어도 된다.) 단순히 "string" 형태의..

시스템 보안 2024.05.19 0

[System Hacking] fho ㅡ Hook overwrite

Hook Overwrite란 malloc, free, realloc 함수는 각각 훅 변수가 존재하며,이 함수들은 시작할 때 해당 훅 변수가 존재하는지 검사하고, 존재하면 이를 호출한다.이때, 이 변수들은 libc의 bss 섹션에 위치하여 쓰기 가능하므로, 실행 중에 덮어쓰는 것이 가능하며,이에 성공하면, malloc/free/realloc 함수를 호출할 때 조작되어버린 훅을 호출하여, 조작된 주소로 jump하게 되므로, 실행 흐름이 조작되는 것이다.게다가, 훅을 실행할 때는 기존 malloc/free/realloc 함수에 전달한 인자를 같이 전달해 주기 때문에,   예를 들어 __malloc_hook를 system 함수의 주소로 덮고, malloc(“/bin/sh”) 을 호출하면,"/bin/sh"이 sy..

Wargame 2024.05.17 1

[RELRO] RELRO의 개념, RELRO의 우회

RELRO란ELF는 data segment에 있는 GOT를 활용하여 반복되는 라이브러리 함수의 호출 비용을 줄이며,이 GOT에 값을 채우는 방식 중 Lazy Binding은   함수가 처음 호출될 때 함수의 주소를 구하고, 이를 GOT에 적는 방식이다.그런데 이 방식의 바이너리는 실행 중에 GOT 테이블을 업데이트할 수 있어야 하기에, GOT에 쓰기 권한이 부여가 되므로 취약하다.한편, ELF의 data segment에는 프로세스의 초기화 및 종료에 실행할 함수들의 주소가 저장된 .init_array, .fini_array가 있는데,여기가 조작이 가능하다면 이또한 취약하다.이러한 문제들을 해결하고자,데이터 세그먼트 중, 쓰기 권한이 불필요한 영역의 쓰기 권한을 제거함으로써, 해당 영역을 보호하는 RELR..

시스템 보안 2024.05.15 0

[PIE] PIC와 PIE의 개념, 상대 참조, PIE의 우회

PIC와 PIE의 개념 PIC(Position-Independent Code): 재배치(Relocation)가 가능하여, 메모리의 어느 주소에 적재(매핑)되어도 코드의 의미가 훼손되지 않고 제대로 실행될 수 있는 코드  - rip를 기준으로 데이터를 상대 참조(Relative Addressing)하기 때문  PIE(Position-Independent Executable): 메모리의 어느 주소에 적재(매핑)되어도 실행 가능한 실행 파일   - PIE의 모든 코드는 PIC이다.- ASLR이 적용되면, 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 뿐만 아니라 코드 영역까지도 무작위 주소에 적재됨 (↔ PIE가 아니면, 코드 영역은 랜덤이 아님)- 다만 ASLR이 안 적용되면, 무작위 주소에 적재되지..

시스템 보안 2024.05.15 0

[DirtyCOW] memory mapping, mmap(), Copy on Write

memory mapping memory mapping이 뭔가요? 일반적으로 file에 access(open, read, write, ...)하는 방식은 두 가지가 있다. 1) by I/O Operation파일에 접근할 때마다 매번 system call을 통해 kernel을 깨워야 함-> overhead가 발생해버린다. 2) by memory mapping처음에 파일의 내용을 프로세스의 메모리에 한번 mapping해 두면,이후에 파일 내용에 접근할 때는, system call이 아니라, 메모리 주소를 통해 직접 접근  -> overhead 최소화! memory mapping by mmap() system callvoid *mmap(void addr[.length],  시작 주소: 어디에다가부터 mappin..

시스템 보안 2024.05.14 0

[Memory management] Paging

이전 글 2024.05.01 - [IT/컴퓨터구조, 운영체제] - [Memory management] Memory virtualization, Dynamic relocation, Segmentation [Memory management] Memory virtualization, Dynamic relocation, Segmentation💡Memory virtualization & Address Space - for Abstraction OS는 physical memory를 virtualize하여,각 프로세스가 전체 메모리를 전부 사용하는 것처럼 보이게 한다. Virtual address를 Physical address로 translate하는 것은 OSintoky.tistory.com 💡3. Paging..

[TF-IDF(Term Frequency-Inverse Document Frequency)] 계산 과정, 강점

TF-IDF의 계산 과정 ✅DTM(Document-Term Matrix): 각 문서들 (행)에서 각 단어들 (열)이 등장한 횟수가 담긴 행렬 여기서 문서를 d, 단어를 t, 문서의 총 개수를 n이라고 하겠다. 그러면... ✅tf(d,t): 특정 문서 d에서의 특정 단어 t의 등장 횟수. (= DTM의 각 셀의 값) ✅df(t): 특정 단어 t가 등장한 문서의 수. ✅idf(t): df(t)에 (대략) 반비례하는 수. ✅TF-IDF: TF와 IDF를 곱한 값.  TF-IDF의 강점 DTM에 비해 TF-IDF는 각 단어의 중요성도 반영하여 처리한다는 강점이 있다.TF의 역할: 어떤 단어가 특정 문서에서 많이 등장했다면 가중치를 높혀줌IDF의 역할: 어떤 단어가 많은 문서에서 등장했다면 가중치를 낮춰줌 ∵ d..

인공지능 2024.05.12 0

[Naive Bayes Algorithm] 원리, 종류, 주의사항

Naive Bayes Algorithm의 원리 E2가 참일 때, E1도 참일 확률 (즉, 조건부 확률)은 아래와 같다. 위 원리를 이용하여,feature X가 만족되었을 때, class Ck일 확률은 아래와 같다.  이때, 보통 이 feature는 하나가 아니라 여러 개이므로, 이를 반영하면 아래와 같다.             eg) 날씨&온도&습도&바람에 따라 사람들이 테니스를 칠지/안칠지 예측하는 문제  여기서, Naive Bayes Algorithm은 각 feature가 독립적이라고 가정하므로, 위 식은 아래와 같이 바꿀 수 있다.아래가  Naive Bayes Algorithm의 최종 공식이다.   Naive Bayes Algorithm의 종류 ✅Gaussian Naive Bayes변수가 conti..

인공지능 2024.05.11 0

[논문] Machine learning을 이용한 Windows malware classification

💡A Survey of Machine Learning Methods and Challenges for Windows Malware ClassificationMachine learning을 이용해 malware를 multi-classification하는 경우, 일반적으로 아래와 같은 것들이 feature로서 선택된다.   또한 분석 method은 아래와 같다. ▶ N-gram ▶ Linear model ▶ Kernel method ▶ Decision tree ▶ Neural network ▶ sequences에 대한 method:      hidden markov model      byte similiarty measure      CNN, RNN      Haar Wavelet Transform 💡..

AI for Security 2024.05.04 1

[Memory management] Memory virtualization, Dynamic relocation, Segmentation

💡Memory virtualization & Address Space - for Abstraction OS는 physical memory를 virtualize하여,각 프로세스가 전체 메모리를 전부 사용하는 것처럼 보이게 한다. 이를 통해 process 간의 isolation을 보장하며, time과 space 면에서 메모리 관리의 효율이 높아진다.  💡1. Dynamic Relocation: HW base  프로세스 하나가 allocation의 unit이다.  ✅Address translationphysical address =  해당 프로세스의 base + virtual address 단, 0 ≤ virtual address  프로그램이 실행을 시작하면, 이 프로세스를 physical memory의 ..

[Security란] Security vs Protection, Authentication vs Authorization

✅Security: keeping unauthorized entities from doing things you don’t want them to do: protecting systems from deliberate attacks - Confidentiality, Integrity, Availability  OS의 역할privileged mode, memory protection, file access permissions, ... ✅Protection: protecting files and other resources from accidental misuse ✅Authentication: proving that someone is who they say they are ✅Authorization: Ve..

시스템 보안 2024.04.21 0

[운영체제란] 운영체제의 역할, HW의 support

운영체제의 역할✅Abstact machinehide underlying details API 제공, system calls✅Resource manager각 application에 시간적/공간적 공유 자원을 allocate    시간적: CPU(app간), network    공간적: memory(app간), disk(user간)한정적 자원의 사용을 효율적으로.   overhead 최소화✅protectionapplication 간에 서로서로 보호 OS 보호 hardware에의 직접적 접근 방지  운영체제를 위한 HW support ✅app이 실행되는 원리OS 실행 시작됨이 OS의 코드는 메모리의 어딘가에 들어감OS의 instruction이 처리됨OS는 사용자 입력을 받아 특정 app을 인식함OS는 실행하려..

[Heap overflow] Heap overflow의 과정, Exploit, Countermeasures

💡Heap overflow의 과정 ✅예시 프로그램 코드   ✅after strcpy(c, ...)   ✅after free(b)chunk B에 fd, bk 포인터가 생기며,이것이 bin_forward, bin_back과 연결됨으로써, free된 chunk B는 bin에 들어간다.  ✅after strcpy(a, ...) chunk A에, 이것의 크기에 비해 과분한 양의 string이 들어간다.🚩따라서 string은 chunk A의 data 공간을 다 채우고 나서 higher address 방향으로 흘러넘쳐 chunk B를 corrupt시킨다.  ✅after free(a) chunk A도 free되어 fd, bk 포인터가 생겼고,이 포인터들이 기존의 bin (free chunk list)과 연결됨으로써..

시스템 보안 2024.04.21 0

[Scheduling in multiple CPU] SQMS, MQMS, CFS, O(1), BFS

Cache Affinity프로세스가 가능한 한 하나의 CPU에서만 실행되게 하는 것 -> 해당 프로세스의 state가 이미 그 CPU의 cache에 남아있으므로, 다음 번에 프로세스가 실행될 때 훨씬 빨라진다. 만약 cache에 해당 프로세스의 state가 없다면, main memory에서 가져와야 하는데, 이것은 cache에 비해 매우 느림. 💡scheduling 방식✅SQMS: Single queue Multiprocessor Scheduling스케줄되어야 하는 job들이 한 queue에 전부 들어가 있다.   단점 - 단일 queue가 여러 CPU에게 공유되어야 하므로 locks가 필요한데, 이 locks는 성능을 크게 떨어뜨리고 scalability가 낮다.- 프로세스들은 매번(매 time sl..

[Scheduling in single CPU] FIFO, SJF, STCF, RR, MLFQ, Lottery, Stride, CFS

💡Scheduling이란?멀티프로그래밍 시스템 (: 실행이 준비된 프로세스가 두 개 이상)에서, OS의 일부인 scheduler는 scheduling 알고리즘을 이용해 무엇을 실행할지 결정한다.🚩스케줄러는 아래와 같이 context switch가 일어나는 모든 순간 invoke되어 다음 실행할 프로세스를 결정한다.   프로세스 생성/종료 후   I/O에서 프로세스 block   I/O 인터럽트 발생    timer 인터럽트 발생 (preemtive한 경우)   ✅스케줄링을 평가하는 metricsturnaround time = 완수된 시점 - 도착한 시점 response time = 처음으로 실행된 시점 - 도착한 시점 fairness = first job이 완수되는 시간 / second job이 완수..

[Format String Bug] with Variable length arguments

💡Format String Bug (FSB)란?위와 같이,format functions에서,format string 내의 format specifier의 개수 != format string을 제외한 argument의 개수인 경우,짝이 없는 format specifier는 메모리 내의 임의의 데이터를 출력해낸다.즉 memory disclosure 취약점이 발생하는 것이다.   ※ format function의 종류 ※ format specifier란? ※ format string란?format specifier가 포함된 string  💡배경 지식: Variable length arguments를 이용하는 함수는 어떻게 구현돼있을까? ✅Variable length arguments를 이용하는 함수의 아주..

시스템 보안 2024.04.15 0

[Synchronization] Condition Variables

💡Condition variables스레드가 실행을 하면 안되는 상황(특정 조건 미충족 등)일 때 자기 스스로를 넣어놓는 queue이다. ✅스레드는 condition variable에 대해 아래와 같은 동작을 수행할 수 있다. - wait(condition_variable, lock): 실행하면 안되는 상황일 때, 스레드 자신의 lock을 release하고 스스로를 어떤 queue에 넣음- signal(condition_variable): 스레드 자신의 state를 바꾸면서, waiting하던 다른 스레드 하나를 깨움 ✅condition variable을 이용하기 위해서는 아래 요소도 필요하다.- state variable: child 스레드가 일을 끝냈는지 여부- locks: state variabl..

[Synchronization] Locks(Mutex)

💡Locks의 개념 ✅Lock 변수 : Lock 변수는 Lock의 상태를 담고 있다. * unlocked: 아무 thread도 lock을 갖고있지 않다. * locked: 딱 하나의 thread가 lock을 갖고 있으며 Critical section 내부에 있다. ✅lock() : lock 획득을 시도한다. 만약 아무 thread도 lock을 갖고있지 않았다면, lock을 획득하고 Critical section에 진입한다. 이 thread가 lock을 갖고있는 동안 다른 thread는 CS 진입이 불가하다. ✅fine-grained approach - better concurrency 여러 개의 변수를 보호하기 위해선 변수마다 하나씩 lock이 있어야 한다. lock() lock() CS1 unlock(..

[Thread] 스레드 사용의 목적, 스레드 vs 프로세스, 스레드의 자원, 스레드 API

💡스레드란 ✅목적 프로세스 간에는 서로의 데이터를 읽을 수 없다. 반면, 스레드끼리는 공유된 메모리를 통해 적은 비용의 커뮤니케이션이 가능하다. 이러한 스레드의 사용으로써, - 리소스가 절약된다. - 여러 request가 감당 가능해진다. - Input/Output 작동과 computation 작동이 동시에 일어날 수 있다. - context switching의 비용이 비교적 덜 든다. - multiprocessor에 더 잘 매핑된다. ✅스레드는 "함수"의 형태로 instruction stream을 실행한다. ✅Process vs. Thread 아래는 한 프로세스에 여러 스레드가 있는 예시이다. 반면 아래는 "프로세스"가 두 개인 것이고, 스레드는 활용되지 않았다. 💡스레드와 Address space 각..

[Process] Process의 개념, Address Space, State, Context switch, API

💡프로세스란 Program: 실행 파일. 코드와 데이터로 이루어져 있음. Process: program의 실행 중인 instance. 💡프로세스의 Address Space (Memory Layout) 모든 각각의 프로세스는 아래와 같이 자신만의 가상 메모리 주소 공간을 가진다. stack: 지역 변수 heap: 동적 할당된 변수 BSS: 초기화되지 않은 정적 변수 data: 초기화된 정적 변수 text: 프로그램 코드 💡프로세스 스케줄링 CPU 안에는 core가 있는데, 이 코어라는 것은 엄밀하게는 한 순간에 하나의 프로세스만을 다룰 수 있으므로, 여러 개의 프로세스가 (거의) 동시에 돌아가기 위해서는 교통정리, 즉 스케줄링이 필요하다. 프로세스의 state ✅New 새 프로세스가 생성되었지만, 아직 운..

[SetUID] 임시적 권한 상승과 이로 인한 취약점

Mode 먼저 파일이나 디렉토리에 대한 권한을 이해해보자. User: 파일의 소유자 Group: 한 Group에 속한 다수의 User는 동일한 permission을 가질 수 있다. 특정 파일에 대한 동일한 접근 권한을 여러 User에게 줘야 하는 경우 Group을 활용하면 효율적이다. Other: User나 Group에 속하지 않는 모든 User SetUID의 개념 필요성 예를 들어 /usr/bin/passwd (계정의 비밀번호를 변경하는 명령어 실행파일)의 경우, /etc/shadow 파일에 접근하여 비밀번호를 변경한다. 이 passwd 실행파일을 소유자인 root 이외의 사용자가 실행할 경우, 이 사용자는 /etc/shadow(root만 접근 가능함)에 대한 접근 권한이 없기 때문에 오류가 발생하여,..

시스템 보안 2024.03.27 0

[System Hacking] basic_rop_x64

스택 프레임 분석 Return address (0x8) SFP (0x8) buf [rbp-0x40] (0x40) 공격 계획 최종 목표: system("/bin/sh") 수행할 것. * system() 주소 구하기 = lib_base + system_offset ** lib_base 구하기 = read() 주소 - read_offset *** read() 주소 구하기 ROP를 통해, write(1, read@got, ...) * "/bin/sh" 주소 구하기 = lib_base + binsh_offset ** system_offset, read_offset, binsh_offset 구하기 libc를 이용 * Return address를 system("/bin/sh")로 Overwrite ROP를 이용 ex..

Wargame 2024.03.19 0

[Return Oriented Programming]

사용 배경과 목적 system 함수를 활용해 셸을 획득하고자 system 함수의 주소를 알고싶은데,프로그램에서 이 함수가 활용되지 않고, 심지어 ASLR 기법이 적용돼 있는 바람에 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등의 주소가 바뀐다면,우리는 좀더 먼길을 돌아 주소를 얻어야 한다.: 프로세스에서 libc가 매핑된 주소를 찾은 뒤,이 주소로부터 system 함수까지의 offset을 구해서,최종적으로 system 함수의 주소를 얻기 libc.so.6 라이브러리에는 system 함수 뿐 아니라 이 바이너리가 호출하는 read, puts, printf도 정의되어 있는데,라이브러리 파일은 메모리에 매핑될 때 전체가 매핑되므로, read, puts, printf 뿐만 아니라 system 함수도 ..

시스템 보안 2024.03.15 0

[Return to Library]

이론  사용 배경과 목적  NX를 우회하여 실행 흐름을 조작하는 것이 RTL의 목적입니다.   NX가 적용되지 않은 경우:어떤 메모리 영역 (eg. 스택 영역)에 쓰기 권한과 실행 권한이 함께 있음 -> 셸코드 주입하여 Return address를 덮어 실행 흐름 조작 가능NX가 적용된 경우:실행될 때 각 메모리 영역에 필요한 권한만을 부여받음-> 일반적으로 셸코드가 주입되었던 위치인 스택 영역이 이젠 실행 권한이 없으므로, 위 방법이 불가해짐따라서, 우리가 직접 주입한 셸코드나, 바이너리에 존재하는 함수는 이젠 활용할 수 없게 됐으니 다른 방식을 찾아봐야 합니다.   원리  리턴 가젯을 활용하여 공유 라이브러리에 있는 함수를 호출하면 NX를 우회할 수 있습니다!  예를 들어, 우리가 현재의 실행 흐름을..

시스템 보안 2024.03.12 0

[z3 solver, WinDbg, IDA] 여러 조건문을 만족시키는 flag 찾기 & 디버깅 [@ KUICS]

아래 내용은 고려대학교 정보보호 동아리 KUICS의 수업 내용을 바탕으로 작성한 것입니다. 1. IDA를 통해 실행파일 디컴파일하여 flag 조건 확인 ✅ line 11~14: while문을 통해, v3의 값이 v7의 요소 개수와 같아집니다. ✅ line 37~40: v4 == True여야만 v5가 congratulations!가 됨을 알 수 있습니다. ✅ line 15~36: if ~ ~, else ~ 구조입니다. else가 실행될 경우 v4 = 0 즉 False가 되므로, v4 = True가 될 수 있도록 if가 실행되어야 함을 알 수 있습니다. 따라서 line 15~27이 모두 만족되어야 합니다. (물론 이것이 만족되어도 v4는 아직 0입니다.) ✅ line 30~31: line 30을 만족하면 l..

역공학 2024.03.10 0

[프로그램 패치] 바이너리 코드 수정하여 프로그램 패치하기 [@ KUICS]

아래 내용은 고려대학교 정보보호 동아리 KUICS의 수업 내용을 바탕으로 작성한 것입니다. 여기 어떤 프로그램이 실행해도 아무 일도 안 일어납니다. 우리는 이 프로그램이 제 기능을 다하도록 패치해 볼 겁니다. 1. objdump 이용해 기계어로 번역하기 2. 원인 파악 위 바이너리를 보아, 프로그램이 갑자기 종료되는 것은 왠지 0x1188 위치에서 killer 함수가 호출되기 때문인 것 같습니다. 3. pwntools의 ELF 객체 이용해 문제의 코드 패치하기 0x1188 위치의 5바이트 만큼의 코드를, 아무 작동이 없다는 의미의 nop의 코드로 대체함으로써, killer 함수의 호출을 없애보겠습니다. 이를 위해선 아래와 같이 코드를 입력합니다. e.address: Address of the lowest..

역공학 2024.03.10 0

[System Hacking] ssp_001

Description Stack Smashing Protector 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. 소스코드: ssp_001.c #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } void print_box(unsigned char *box, int id..

Wargame 2024.03.07 0

[Stack Canary] Stack Buffer Overflow로부터 Return address를 보호하기

목적 스택 버퍼 오버플로우 공격으로부터 return address를 보호하기 작동 원리 함수의 프롤로그에서: 스택 버퍼와 반환 주소 사이에 임의의 값 (= 즉 Canary)을 삽입 그 후, 함수의 에필로그에서: 해당 값의 변조를 확인 만약 Canary 값의 변조가 확인되면: 프로세스가 강제 종료됨 공격자가 스택 버퍼 오버플로우를 통해 return address를 overwrite하는 경우, 만약 return address 이전에 canary가 마련돼 있다면, return address overwrite 이전에 필연적으로 canary가 먼저 overwrite 되겠지요. 이때, 공격자는 일반적으로 Canary 값을 모르므로 (공격자가 이 값을 알아내는 특별한 경우도 있는데 다른 글에서 다루겠습니다), 공격 ..

시스템 보안 2024.03.05 0

[System Hacking] basic_exploitation_000

Description 프로그램의 취약점을 통해 셸을 획득한 후, "flag" 파일을 읽어야 한다. 공격 대상의 코드 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int argc, char *argv[]) { char buf[0x80]; // 128바이트 initialize(); printf("buf = (%p)\n", buf); scanf("%..

Wargame 2024.03.02 0

[Stack Buffer Overflow] Return Address Overwrite을 통한 실행 흐름 조작

Return Address Overwrite Buffer overflow를 통해 stack의 return address 값을 조작하면, 프로세스의 실행 흐름을 조작할 수 있다. 취약점 분석 취약점이 있는 코드: rao.c #include #include void init() { setvbuf(stdin, 0, 2, 0); // setvbuf(FILE 구조체에 대한 포인터, 버퍼, 버퍼링 모드, 버퍼 크기(바이트)) setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); pr..

시스템 보안 2024.03.01 0

[Stack Buffer Overflow] 데이터 변조와 유출

데이터 변조 #include #include #include int check_auth(char *password) { // 입력값(= password)을 buffer(= temp)에 담아 인증을 구현하는 함수 int auth = 0; char temp[16]; strncpy(temp, password, strlen(password)); // strncpy: 입력받은 password 중 어떤 길이 (여기서는 strlen(password))만큼을 temp에 복사함. // 이때, password의 길이가 temp의 크기보다 크면, // password의 일부는 스택에서 temp가 차지한 범위를 넘어감. // 이때, 그 넘친 위치에 만약 중요한 데이터가 있었다면, 이 데이터를 오염시켜버림. // 이 코드의 경..

시스템 보안 2024.02.29 0

[System Hacking] shell_basic: orw를 통해 flag 파일 얻기

1. mycode 어셈블리 작성하기 이 문제에서 orw를 하기 위해서는 아래와 같은 syscall이 필요하다. 1. open("/home/shell_basic/flag_name_is_loooooong", RD_ONLY, NULL) 2. read(fd, buf, 0x30) 3. write(1, buf, 0x30) 따라서 위를 수행하는 어셈블리를 아래와 같이 작성했다. "/home/shell_basic/flag_name_is_loooooong"의 hex를 stack에 push하기 xor rax, rax push rax mov rax, 0x676e6f6f6f6f6f6f push rax mov rax, 0x6c5f73695f656d61 push rax mov rax, 0x6e5f67616c662f63 push ..

Wargame 2024.02.29 3

[Shellcode] objdump을 이용한 byte code 추출

예시 어셈블리 코드 (shellcode.asm)의 byte code를 추출해보겠습니다. shellcode.asm section .text global _start _start: xor eax, eax push eax push 0x68732f2f push 0x6e69622f mov ebx, esp xor ecx, ecx xor edx, edx mov al, 0xb int 0x80 1. nasm 설치 sudo apt-get install nasm 2. shellcode.o 생성 nasm -f elf shellcode.asm 3. shellcode.o 파일을 어셈블리 언어로 변환하여 출력 objdump -d shellcode.o 4. shellcode.bin 생성 objcopy --dump-section .t..

시스템 보안 2024.02.28 0

[Shellcode] execve

목적 execve 셸코드를 이용하면 임의의 프로그램을 실행할 수 있는데요, 만약 그것이 셸 프로그램이라면, 서버의 셸을 획득한 것이므로, 서버의 시스템을 제어함으로써 시스템 해킹을 성공한 것이 됩니다. ※ 셸(Shell): 운영체제에 명령을 내리기 위해 사용되는 사용자의 인터페이스 방법 1. execve 셸코드 작성 linux의 다양한 셸 프로그램 중 기본인 /bin/sh를 실행하는 execve 셸코드를 작성해보겠습니다. execve 셸코드는 스켈레톤 코드 (C언어로 작성됨) + 셸코드 (어셈블리) 의 구조입니다. 스켈레톤 코드 __asm__( ".global run_sh\n" // C에서 run_sh에 접근 가능하도록 global로 설정 "run_sh:\n" // 아래 어셈블리 코드는 예시이며, 각 l..

시스템 보안 2024.02.28 0

[Shellcode] orw: open-read-write

목적 공격 대상이 되는 시스템의 파일을 유출해 내는 것입니다. 방법 아래는 linux 환경에서 진행한 것입니다. 0. 공격 대상이 될 파일 작성 실습을 위한 예시입니다. echo 'flag{this_is_open_read_write_shellcode!}' > /tmp/flag 1. orw 셸코드 작성 “/tmp/flag” 파일을 읽는 orw 셸코드를 작성해 보겠습니다. orw 셸코드는 스켈레톤 코드 (C언어로 작성됨) + 셸코드 (어셈블리) 의 구조입니다. 스켈레톤 코드 __asm__( ".global run_sh\n" // C에서 run_sh에 접근 가능하도록 global로 설정 "run_sh:\n" // 아래 어셈블리 코드는 예시이며, 각 line은 \n으로 구분되어야 함 "xor rdi, rdi\n..

시스템 보안 2024.02.27 0

[Stack Frame] 프로시저 호출 시의 스택 프레임 살펴보기

코드가 쭉 진행되다가 특정 프로시저가 호출되면, 프로시저가 실행되고 나서 다시 원래의 실행 흐름으로 돌아옵니다. 예시 코드 0x400000: call func: push  &  jmp 0x400005: mov esi, eax...0x401000: push rbp 0x401001: mov rbp, rsp 0x401004: sub rsp, 0x30 0x401008: mov BYTE PTR[rsp], 0x3 ...0x401020: leave: mov rsp, rbp  &  pop rbp 0x401021: ret: pop rip  &  jmp rip   빠르게 보는 전 과정의 메모리 변화  상세한 작동 1. 프로시저 호출2. function prologue: 기존 상태의 기록, 새로운 stack frame의 마..

시스템 보안 2024.02.20 0

[Docker] multi-container application: Docker compose

이전 글 👇 2024.02.07 - [IT/DevOps] - [Docker] Database 유지하기: 2. Bind mount [Docker] Database 유지하기: 2. Bind mount이전 글 👇 2024.02.06 - [IT/DevOps] - [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공intoky.tistory.com Docker Compose 대부분의 Application들은 Database를 필요로 하고, Ap..

DevOps 2024.02.07 0

[Docker] Database 유지하기: 2. Bind mount

이전 글 👇 2024.02.06 - [IT/DevOps] - [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공유하기: Docker registry, Docker Hub [Docker] Application 공유하기: Docker registry, Docker Hub 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Doc intoky.tistory.com Bind mou..

DevOps 2024.02.07 0

[Docker] Container의 filesystem, Database 유지하기: 1. Volume mount

이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공유하기: Docker registry, Docker Hub [Docker] Application 공유하기: Docker registry, Docker Hub 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Docker] Application 업데이트하기 이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an applicat intoky.tistory.com Container의 filesyste..

DevOps 2024.02.06 0

[Docker] Application 공유하기: Docker registry, Docker Hub

이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Docker] Application 업데이트하기 이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an application Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 intoky.tistory.com Share the application ✅ 큰 그림 ✅Docker Hub에서 새 repository 만들기 repository 이름은 getting-st..

DevOps 2024.02.05 0

[Docker] Application 업데이트하기

이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an application Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 분리할 수 있게 해줍니다. 따라서 이 Application의 배포가 더 용이해집니다. ✅아주 큰 구조 ✅그 중, Docker intoky.tistory.com Update the application 이미 어떤 App을 containerize한 상황해서, 이 App의 소스코드를 수정해서 다시 containerize하는 방법을 알아보겠습니다. ✅ ..

DevOps 2024.02.05 2

[Docker] Overview, Application containerize하기

Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 분리할 수 있게 해줍니다. 따라서 이 Application의 배포가 더 용이해집니다. ✅아주 큰 구조 ✅그 중, Docker File & Docker Image & Docker Container의 관계 Docker Container 한 컴퓨터 내에서 여러 서비스를 진행하게 되었을 때, 각 서비스마다 요구하는 프로그램의 버전이 다를 수 있습니다. 따라서, 각 서비스마다 요구하는 특정 버전의 프로그램들끼리만 이 Container에 넣어둔 것입니다. Docker Image 특정 서비스가 요구하는 환경을 기록해두기 위해, linux 컴퓨터 상에서 특정 상태를 캡처하여 박제해놓은..

DevOps 2024.02.04 0

[Node.js와 Session] Session을 이용한 인증 구현 (생활코딩 강의 기반)

✅ 이 실습을 통해 우리가 만드려는 것은 Session 방식을 이용해 로그인과 회원가입 등 인증 기능이 있는 웹사이트입니다. 사용자가 브라우저를 통해 서버에 접속하면서, 브라우저는 쿠키를 서버로 전송한다. 서버 컴퓨터에는 이러한 쿠키들이 session으로서 저장되고, 사용자에게는 단지 식별자 (= Session ID) 쿠키만이 저장된다. Q. 왜 Cookie가 아니라 Session을 사용하나? A. Cookie를 통한 인증은, 가능은 하지만, 보안 상의 문제가 크다. (클라이언트 쪽에 ID와 PW 쿠키가 있으므로) ✅ 디렉토리 구성과 주요 코드 설명 // 주석은 크게 나뉘어진 단계이고, //// 주석은 해당 코드에 대한 자세한 설명입니다. authFunctions.js module.exports = { ..

2024.02.01 2

[Node.js와 Cookie] Cookie의 생성, 읽기, 활용 (생활코딩 강의 기반)

요청과 응답으로만 의사소통했던 웹은 쿠키의 등장으로써 이전의 통신 내용을 기억할 수 있게 되었고, 이 덕분에 개인화나 인증 등이 가능해졌습니다. 이 글에서는 쿠키를 생성하는 법, 읽는 법, 그리고 쿠키가 실제로 어떻게 활용되는지를 공부하도록 하겠습니다. ✅ 실습 파일과 코드 설명 // 주석은 크게 나뉘어진 단계이고, //// 주석은 해당 코드에 대한 자세한 설명입니다. var http = require('http'); var cookie = require('cookie'); var count = 0; //// 단지 확인용... 아래의 createServer가 몇회 째 실행되는건지 체크 http.createServer(function(request, response){ count += 1; console...

2024.01.28 0

[Node.js를 통한 동적 웹사이트 구현 <2>] 사용자도 생성/업데이트/삭제가 가능해졌다..!! with Express (생활코딩 강의 기반)

지난 글 ([Node.js를 통한 동적 웹사이트 구현 ] 중복되는 부분을 template으로! (생활코딩 강의 기반))에서는 동적 웹사이트 구현을 시작해봤었습니다. (아직 사용자의 참여는 불가능) 👇 [Node.js를 통한 동적 웹사이트 구현 ] 중복되는 부분을 template으로! (생활코딩 강의 기반) :: kyagile (tistory.com) ✅ 이 실습을 통해 우리가 만드려는 웹사이트는 이전 글에서 구현한 웹사이트 위에 추가적으로, 서버 운영자가 아닌 일반 사용자도 컨텐츠(가 담긴 웹페이지)의 생성, 업데이트, 삭제가 가능하게끔 합니다. 다만 이전 글에서와 달리 express를 활용합니다. ✅ 디렉토리 구성하기 아래와 같이 디렉토리를 구성하면 됩니다. ✅ main.js, index.js, top..

2024.01.24 0

[Node.js를 통한 동적 웹사이트 구현 <1>] 중복되는 부분을 template으로! (생활코딩 강의 기반)

지난 글 ([웹서버/웹사이트, 웹클라이언트 실습] with HTML, Disqus, Tawk.to (생활코딩 강의 기반))에서는정적 웹사이트를 구현해봤었습니다. 👇 [웹서버/웹사이트, 웹클라이언트 실습] with HTML, Disqus, Tawk.to (생활코딩 강의 기반) :: kyagile (tistory.com) ✅ 정적 웹사이트의 한계 수동적, 반복적 정적 웹사이트에서는 각 페이지의 구현을 위해서 각각의 html 파일이 필요하였고, 이 방식에서는, 페이지들끼리 겹치고 반복되는 부분이 있더라도, 하나로 묶지 못했습니다. 따라서, 새로 넣을 페이지가 이전 페이지들과 유사하더라도, 여전히 처음부터 끝까지 html 파일을 다시 작성해야 했고, 혹여 어느 부분을 조금이라도 수정하고 싶다면, 모든 html의..

2024.01.19 0

[웹서버/웹사이트, 웹클라이언트 실습] with HTML, Disqus, Tawk.to (생활코딩 강의 기반)

이 글은 생활코딩의 WEB1 - HTML & Internet 강의 내용을 제 나름의 구조로 재구성한 것이며, 사용하는 에디터는 VSCode입니다. 1. 인터넷의 기본 구조: 서버와 클라이언트 인터넷이라는 것이 동작하기 위해서는, 최소한 서버 1대와 클라이언트 1대가 필요합니다. 서버 컴퓨터에는 웹서버 프로그램 (eg. Apache, Nginx, ...)이, 클라이언트 컴퓨터에는 웹브라우저 프로그램 (eg. Chrome, Edge, Safari, ...)이 설치돼 있어야 합니다. 서버 컴퓨터에는 어떤 주소 (여기서는 info.cern.ch라 하겠습니다.)가 부여되어 있고, 컴퓨터 어딘가에 index.html이라는 파일이 저장돼 있습니다. 이런 상황에서 우리는 "인터넷"을 이용해, 클라이언트 컴퓨터에서도 서..

2024.01.17 0

[Internet layer (2) - Routing Protocols: IGP, EGP, Link State, Distance Vector, Path Vector] in TCP/IP 4 layer

Routing Protocols ※ Static VS. Dynamic Routing ▶ Static: 관리자가 직접 경로를 지정합니다. ▶ Dynamic: 라우터가 자동으로 라우팅 테이블을 만들어 라우팅합니다. Interior Gateway Protocols (IGP) 한 AS 내에서 라우터들끼리 정보를 교환하는 프로토콜 ✅ Link State - OSPF, ISIS 우선 네트워크 토폴로지 정보를 모든 라우터에게 전달한 다음, 그 후 동시에 라우팅 테이블을 생성합니다. 이로써 모든 라우터는 완벽한 전체 네트워크 토폴로지와 모든 link의 비용을 알게 되며, 이것을 LSD(Link State Database)라 합니다. LSD를 바탕으로 특정 destination을 향한 모든 경로에 대한 지도를 그린 뒤,..

네트워크 2024.01.08 0

[Internet layer (1) - NAT, ICMP, ARP] in TCP/IP 4 layer

Internet layer의 다양한 프로토콜들을 알아보겠습니다! NAT(Network address translation) 목적 - IP 절약: 하나의 공인 IP주소로 여러 대의 호스트가 인터넷 접속 가능 - 보안성 제고: 외부 공격자는 라우터 내부 네트워크의 사설 IP를 알수 없어, 최종 목적지로의 공격이 어려워짐 동작 원리 (S: Source, D: Destination 입니다.) 1) 호스트 → 게이트웨이 (사진 상 위, 왼쪽) S IP: 호스트의 사설 IP주소 D IP: 서버 IP주소 2) 게이트웨이 → 서버 (사진 상 위, 오른쪽) ▶ NAT table: 호스트의 사설 IP주소, 게이트웨이의 공인 IP주소, 목적지 IP주소 포함됨 PAT의 경우: Source 포트번호, 사설망 포트번호 추가됨 S..

네트워크 2024.01.07 0

[Transport layer - TCP, UDP] in TCP/IP 4 layer

TCP (Transmission Control Protocol) 신뢰성 흐름 제어 흐름 제어란? 송신자와 수신의 데이터 속도가 다를 수 있기에, 송신자의 데이터 송신 속도를 제어하여, 수신자가 받을 수 있을 만큼의 데이터만 효율적으로 전송함으로써 수신의 Overflow를 방지하는 것입니다. 다음과 같은 방식들로 구현될 수 있습니다. 1. Stop & Wait . 2. Sliding Window Stop & Wait 방식을 거의 병렬적, 독립적으로, 동시에 여러개를 하는 것? 이건 저만의 생각입니다. sliding window란, 수신자가 수신 가능한 크기 (= Window size) 내에서 패킷을 연속으로 전송함으로써 (ACK를 기다리지 않고), Stop & Wait에 비하여 효율을 크게 높인 것입니다...

네트워크 2024.01.04 0

[Application layer - DNS, DHCP, SMTP, IMAP, POP3, FTP, HTTP] in TCP/IP 4 layer

Application layer의 다양한 프로토콜들을 알아보겠습니다! Name System DNS Domain을 IP address로 전환해줍니다.사용자가 www.example.com이라는 Domain의 IP address를 DNS에게 물으면, DNS는 이에 대한 답을 해줍니다.    사용자가 www.example.com이라는 Domain에 접속하려 할 때, 다음과 같은 과정이 이루어집니다.    (그림의 "recursive"라 표현된 위치는 DNS resolver입니다.) 1. 사용자의 요청은 DNS resolver로 라우팅됨     - DNS resolver는 ISP가 관리함     - 사실, 이렇게 DNS resolver가 요청을 받은 뒤,        DNS resolver의 Cache에 "www..

네트워크 2024.01.02 0

[Hash Function, MDC, MAC, Digital Signature]

해시함수 란? 일반적인 양방향 암호기법 (대칭키, 공개키 암호기법 등)과 달리, 단방향 암호기법이며, key를 사용하지 않는다. - 복호화가 사실상 불가능함을 의미. 입력으로는 임의의 크기가 들어갈 수 있지만, 출력은 크기가 고정되어 있다. 암호학적 관점에서 안전한 해시함수의 성질은 아래와 같다. (H: 해시함수) 1. 역상 저항성: H(x)가 주어졌을 때, x를 찾기 어렵다. 2. 제2 역상 정항성: x가 주어졌을 때, H(y) = H(x)인 y를 찾기 어렵다. 3. 충돌 저항성: H(x) = H(y)인 (x, y) 쌍을 찾기 어렵다. 이러한 암호학적 해시함수의 설계 방식으로는 Merkle-Damgard 구조가 있다. (f: 압축 함수) f_i = f(m_i, f_i-1) (i = 2~n) MDC (M..

암호학 2023.12.31 1

[ElGamal] in Public-key cryptosystem

수식 입력이 번거로워서 수식 표현이 좀 매끄럽지 못합니다. 특히 주의해서 보실 것: 예를 들어 a의 역원인 경우, a역 이라 표현했습니다. 키생성 public key: (e1, e2, p)이고, private key: d이다. 큰 소수 p 선택 1 ≤ d ≤ (p - 2) 범위에서 임의의 d 선택 (Z_p)*에서 원시근 e1 선택 e2 ≡ e1^a mod p 암/복호화 암호화 임의의 r 선택 c1 ≡ e1^r mod p c2 ≡ (m * e2^r) mod p 최종 암호문은 (c1, c2)이다. 복호화 m ≡ c2 * (c1^a) mod p 취약점 알려진 평문 공격 동일한 r을 이용하면 알려진 평문 공격에 위험해진다. 공격자가 m, c1, c2, c1', c2'을 알고 있을 때, (또한, m, m'은 같은..

암호학 2023.12.27 0

[RABIN] in Public-key cryptosystem

수식 입력이 번거로워서 수식 표현이 좀 매끄럽지 못합니다. 특히 주의해서 보실 것: 예를 들어 a의 역원인 경우, a역 이라 표현했습니다. 키 생성 public key: n이고, private key: (p, q)이다. 서로다른 두 소수 p, q (4k+ 3 형태)를 선택한 뒤, n을 얻는다: n = p * q 암호화 c ≡ m^2 mod n 복호화 먼저, c1 ≡ c mod p, c2 ≡ c mod q를 계산한다. 이를 이용하여, a1 and a2 ≡ +- c1^(p+1 / 4) mod p, b1 and b2 ≡ +- c2^(q+1 / 4) mod q를 계산한다. 여기서, a1 또는 a2, 그리고 b1 또는 b2 중 하나씩 고르는 경우의 수는 2*2 = 4가지이므로, m = p * (p역 mod q) ..

암호학 2023.12.27 2

[RSA] in Public-key cryptosystem

수식 입력이 번거로워서 수식 표현이 좀 매끄럽지 못합니다. 특히 주의해서 보실 것: 예를 들어 a의 역원인 경우, a역 이라 표현했습니다. 키 생성 public key: (e, n)이고, private key: d이다. 생성 단계 p, q 선택: p != q, p와 q는 소수 n 계산: n = p * q psi(n) 계산: psi(n) = (p - 1)(q - 1) e 선택: 1 < e < psi(n) - 1이며 psi(n)과 서로소 d 계산: d ≡ e역 mod psi(n) 암/복호화 암호화 c ≡ m^e mod n 복호화 m ≡ c^d mod n 효율적인 복호화 CRT를 활용한다. 즉, c^d mod n을, 아래와 같이 나누어서 하는 것이다. 먼저, m1 ≡ c^d mod p와 m2 ≡ c^d mod..

암호학 2023.12.27 2

[Pipeline CPU] in RV32I CPU microarchitecture

이 글에 포함된 모든 사진 자료들은 (서태원 지음) 에서 가져왔습니다. Pipeline CPU란 “ pipeline CPU란, single-cycle CPU 구조를 여러 stage로 나누어, 각 부분을 동시에 활용되게끔 하는 것이다. (아래 사진 참고) single-cycle CPU에서는, 하나의 instruction이 완료되고 나서야 그 다음 instruction을 수행한 데 비해, pipeline CPU의 경우, 매 clock cycle의 각 stage에서는 다른 instruction이 실행되고 있다. (아래 사진 참고) “ 전형적인 것은 5-stage pipeline CPU이며, 각 stage는 다음과 같다: IF(Instruction Fetch): 명령어를 읽는 단계 ID(Instruction D..

[Pyinstaller] exe 파일 못 만드는 오류! (yolo ultralytics 관련)

상황 설명은 필요 없고 빠른 해결을 원하신다면 빨간 글자를 따라가주세요! 상황. pyqt를 이용해 인터페이스의 구성과 기능을 정의했으며, 그 기능들 중에는 yolo v8 모델의 predict 메서드를 활용하는 것이 있다. 실제로 실행시킬 main.py는 별개로 작성했으며, 여기서는 위에서 만들어진 인터페이스 py 내의 클래스를 임포트한다. 나는 이 main.py를 exe로 만드려 한다. 우선 새로운 폴더에 프로그램 구동에 필요한 모든 파일 (인터페이스 py 파일, main.py, yolo v8 모델의 pt 파일 정도?) 들을 넣어놓고, 이 폴더 위치에서 터미널을 열어 아래와 같이 실행하였다. pyinstaller -w -F main.py 이를 통해 생성된 작업폴더 > dist > exe 파일을 실행해보았..

DevOps 2023.08.18 2

[Object Detection / Recognition / Tracking] Feature Extraction 기법: SIFT, SURF, ORB

SIFT (Scale Invariant Feature Transform) detects distinctive keypoints(local features) or features in an image that are robust to changes in scale, rotation, and affine transformations We naturally understand that the scale or angle of the image may change, but the object remains the same. BUT machines have an almighty struggle with the same idea. It’s a challenge for them to identify the object..

인공지능 2023.07.29 0

논문 스터디

attack and defense in deep model security 1. Deep model watermarking # Digital Watermarking: watermark를 embed하여 authentication, content verification을 제공해 tampering 방지 * 과정 i) watermark embedding ii) watermark extraction # model watermarking은 MLaaS에 의한 시장에서 크게 활약 가능 * model theft로부터 보호 # 2 categories i) inserting the watermark directly into the model parameters -> watermark might either be encode..

Security for AI 2023.05.07 0