본문 바로가기

전체 글21

Java synchronized 키워드와 Memory Barrier 자바를 공부해본 사람이라면 effective java (3rd) 라는 유명한 책에서 다음과 같은 예제 코드를 본 적이 있을 것이다. public class StopThread { private static boolean stopRequested; public static void main(String[] args) throws InterruptedException { Thread backgroundThread = new Thread(() -> { int i = 0; while (!stopRequested) i++; }); backgroundThread.start(); TimeUnit.SECONDS.sleep(1); stopRequested = true; } } 실행 시 JVM은 먹통이 되고 실행되지 않는.. 2021. 11. 3.
Git Internal - 이문서는 git internal pdf문서 (https://github.com/pluralsight/git-internals-pdf)의 Understanding Git파트에서 몇몇 부분을 추가해 정리한 내용입니다. Git Object Type Git이 repository를 저장할 땐 4가지의 Git Object Blob, Tree, Commit, Tag 를 이용해 저장한다. git object들은.git 디렉토리에 zlib으로 compressed 되어 저장된다. 그리고 그 Object의 이름은 [compress 되기 전의 content데이터+헤더값]의 sha-1 hash가 object의 이름이 된다. 헤더값은 [종류]\x20[decimal ascii size]\x00 포맷이다. 즉 Objec가 blo.. 2021. 11. 2.
Kubernetes Network POD network POD 의 기본 네트워크 POD는 하나의 namespace를 공유하는 여러개의 container로 이루어진 단위이다. 아래에서 POD1을 보면 puase, container1, container2가 하나의 POD를 이루는걸 볼 수 있다. 모든 process가 죽어버리면 network namespace도 사라져버리는데 이를 방지하기 위해 pause container가 따로 존재한다. pause container는 sleep을 주구장창하면서 pod를 위한 network namespace를 유지해준다. 그림에서 보듯 2개의 POD가 있다고 하자. 왼쪽을 POD1 이라 하고 오른쪽을 POD2 라고 하자. POD1이 POD2에 패킷을 보내고 싶다면 어떻게든 dest IP가 10.0.2.2인 .. 2021. 6. 23.
LINE CTF - 2021 ( diveInternal, your-note ) challenge code: https://github.com/zbvs/ctf/tree/master/linectf-2020 - diveInternal - docker-compose.yml version: "2" services: nginx: build: context: ./nginx/ container_name: linectf_diveinternal_nginx restart: always image: linectf_diveinternal_nginx ports: - "12004:80" networks: - ctf-network public: build: context: ./public/ target: production container_name: linectf_diveinternal_public rest.. 2021. 3. 23.
about me 탁종민 / Jongmin Tak ( zbvs12@gmail.com ) Software Engineer & Software Security Researcher - Work Experience Line Next, Software Engineer Secunology Lab , Security Researcher Enki , Security Researcher - Contest 국제해킹대회 DEFCON 2019 본선진출 (최종 9위, Team seoulplusbadass ) 국제해킹대회 Plaid CTF 2019 3위 ( Team seoulplusbadass ) 국제해킹대회 DEFCON 2018 본선진출 (최종 13위, Team C.G.K.S ) 국제해킹대회 HITCON CTF 2018 20위 ( Team Le.. 2021. 1. 9.
Chrome V8 BigInt Type-Confusion Bug (* poc code of this bug : https://github.com/zbvs/opensource-research/tree/master/v8/speculative_bigint ) V8 엔진에서 JIT 버그를 찾게 되었다. BigInt 타입에 대한 Type-Confusion 버그였는데 안타깝게도 BigInt의 특성 때문에 OOB Read까지만 가능했고 이 버그만으로는 Exploit이 가능하지는 않았다. Chrome Fullchain Exploit을 해보자고 팀으로 준비중비였는데 언젠가 써먹을 날이 오겠지 하고 냅 두었다가 어느 순간 패치가 되어있었다. 묵혀뒀던 이 버그에 대해 이야기를 하려 한다. 버그의 PoC는 V8 8.0 버전 쯤에서 테스트했었는데 아마 V8 7.5 ~ 8.4 정도 버전까지 .. 2021. 1. 9.
Chrome V8 Garbage Collector and Write Barrier 자바스크립트 엔진은 오브젝트들에 대한 레퍼런스들을 추적하고 레퍼런스들이 없어지면 가비지 컬렉팅한다. 크롬 V8은 2개의 가비지 컬렉터가 있는데 하나는 Minor GC라 하며 전체 메모리 공간 중 Young Space라 불리는 메모리 공간이 부족할 때 활동하는 가비지 컬렉터이다. 따라서 상대적으로 빈번히 GC를 실행한다. 하나는 Major GC이며 가끔씩 Young Space 뿐만 아니라 Heap Space 전체를 통째로 가비지 컬렉팅할 때 동작한다. 이번 글은 주로 Minor GC에 대해 다룰 것이다. Minor GC는 Young Space라 불리는 지역을 관리하는데 Young Space는 새로 생성된 Object들이 존재하는 Heap Space이다. Minor GC는 이 Young Space를 다시 두.. 2021. 1. 8.
Chrome V8 Map and Map Transition Chrome 웹 브라우져의 V8은 Map이라는 내부 Object로 오브젝트의 구조 정보를 저장한다. 말하자면 V8에서는 Map이 곧 오브젝트의 class혹은 타입을 의미한다. 만약 두 오브젝트가 똑같은 프로퍼티를 가지고 있다면 같은 Map을 공유하고 다른 프로퍼티를 가지고 있다면 다른 Map을 가지게 된다. V8 Turbofan은 자바스크립트 코드를 컴파일 할때 타입 피드백을 이용해 컴파일하는데 예를 들어 아래 그림과 같이 my_obj라는 {a:int, b:int} 프로퍼티를 가진 오브젝트가 temp함수의 argument로 사용되었다면 V8은 그 Object의 Map을 피드백으로 저장한다. 피드백으로 저장된 Map정보는 나중에 JIT-Compiler가 컴파일을 진행할 때 타입정보로 이용한다. 자바스크립트.. 2021. 1. 8.
Docker's Internal Overlay FS in Linux Linux의 OverlayFS 는 lowerdir, upperdir, merged 로 구성된다. lowerdir : OverlayFS의 Readonly layer 이다. upperdir : OverlayFS의 Read-Write layer 이다. merged : lowerdir와 upperdir가 merged 된 최종 layer이다. overlayFS는 layer와 layer를 겹겹히 쌓은 파일시스템이다. 위에서 내려다 봤을 때 가장 윗 층에서 변경한 파일의 내용이 보인다. 예를들어 아래 그림에서 /c/d.txt는 lowerdir2 레이어의 내용이 보이고 lowerdir1의 내용은 무시된다. merged 레이어는 lowerdir 와 upperdir layer에 대한 일.. 2021. 1. 7.