Project 18

[Wasm] WebAssembly API란?

WebAssembly API란? WebAssembly API는 브라우저 및 JavaScript 환경에서 Wasm Module을 로드, 실행, 상호작용하기 위해 제공되는 JavaScript 인터페이스이다.  Wasm API를 통해 JS와 Wasm 간의 양방향 상호작용이 가능해 C, C++, Rust 등에서 컴파일된 코드를웹 애플리케이션에서 사용 가능하다.   WebAssembly API 주요 구성 요소 WebAssembly.ModuleWasm Module을 생성하는 메서드로 지정된 Wasm 바이너리 코드를 동기적으로 컴파일해 Wasm Module을 반환한다.const wasmBinary = new Uint8Array([ Binary Code ]); const module = new WebAssembly.M..

Project 2025.02.27

[Wasm] CVE-2017-5088(Out of Bound) 취약점 분석 및 재현

본 글은 [이가현, 최형기 성균관대학교 「WebAssembly 기능 도입으로 인해 크롬에 서 발생한 오류들의 분석」, 한국소프트웨어종합학 술대회, 온라인, 2020]을 참고하여 작성한 글임을 사전에 밝힌다. DBpia논문, 학술저널 검색 플랫폼 서비스www.dbpia.co.kr  CVE-2017-5088 59.0.3071.104 for Mac, Windows, Linux 그리고 59.0.3071.117 for Android 버전 이하에서 발생하는취약점으로 초기의 V8 엔진이 Wasm의 사용자 정의 섹션 (Custom Section)을 엄밀하게 다루지 않아발생하는 취약점이다.  Custom Section은 개발자가 임의로 데이터를 저장하는 섹션이기에 API 키나 암호화 키 등 민감한 정보가 포함될 수 있어..

Project 2025.02.27

[Wasm] CVE-2018-6036(Underflow) 취약점 분석 및 재현

본 글은 이전글에 이어 [이재홍, 최형기 성균관대학교 소프트웨어융합대학 ACK 2021 학술발표대회 논문집 (28권 2호)]를 참고하여 작성한 글임을 사전에 밝힌다.  CVE-2018-6036 CVE-2018-6036 취약점은 Chrome 64.0.3282.119 이전 버전에서 Wasm Module을 제작할 때 Custom Section에서 유효하지 않은 Section Length에도 불구하고 Module이 만들어지며 생기는 문제이다. 본 취약점은 Main Thread가 아닌 Worker Thread에서 발생하는데 여기서 Main Thread는 브라우저가 사용자 이벤트를 처리하는 곳이며, Worker Thread는 Main Thread와 달리 백그라운드에서 동작하는 스레드이다. 취약점을 발생시키기 위해..

Project 2025.02.27

[Wasm] CVE-2018-6092(Overflow) 취약점 분석 및 재현

본 글은 [이재홍, 최형기 성균관대학교 소프트웨어융합대학 ACK 2021 학술발표대회 논문집 (28권 2호)]를 참고하여 작성한 글임을 사전에 밝힌다.  CVE-2018-6092 CVE-2018-6092 취약점은 Window Chrome 66.0.3359.117 32bit 이전 단계에서 발생하는 웹 어셈블리 관련 Integer Overflow 취약점으로 연산을 검증하는 로직이 부족해 발생하는 취약점이다. if ((count + type_list->size()) > kV8MaxWasmFunctionLocals) { decoder->error(decoder->pc() - 1, "local count too large"); return false} Chromium Bug Report에서 Integer ..

Project 2025.02.27

[Wasm] 웹 어셈블리 c코드로 변환하기

wabt 설치 sudo apt updatesudo apt install cmakesudo apt install ninja-buildsudo apt install wabt 위 과정을 통해 wabt를 설치가능하다. 이제 wasm2c 등의 명령어를 사용 가능하다.  wasm2c를 사용한 분석  wasm2c는 wasm을 c 코드로 변경하는 도구로, c 코드에서도 웹 어셈블리를 사용 가능하도록 하는 도구이며아래 명령어로 사용 가능하다.wasm2c [분석할 .wasm 파일] -o [저장할 c파일의 이름] // hello.c#include int main() { printf("Hello! World!\n"); return 0;} 이 코드를 컴파일해 만든 wasm 파일을 다시 wasm2c 도구를 통해 c언어로 변환..

Project 2025.02.27

[Wasm] 웹 어셈블리 파일 .wasm 생성하기

개발환경 구축 Wasm By Example-Hello World! 를 참고한 글이며 해당 방법 외에도다른 컴파일 방법이 존재함을 사전에 밝힌다. // github에서 emsdk 도구 가져오기git clone https://github.com/emscripten-core/emsdk.git // 생성된 emsdk 디렉터리로 이동cd emsdk Emscripten의 도구인 emsdk를 github에서 가져온다.해당 명령어를 입력하면 현재 위치한 디렉터리를 기준으로 emsdk가 불러와진다. ./emsdk install latest./emsdk activate latestsource ./emsdk_env.shcd ../ 다음으로 emsdk를 사용해 Emscripten의 최신 빌드를 설치하고 활성화한다. // he..

Project 2025.02.27

[Wasm] 웹 어셈블리란?

웹 어셈블리란? 웹 어셈블리가 등장하기 이전 브라우저는 css, html, javascript만을 이해할 수 있었으나,2017년을 기점으로 여러 브라우저에 WebAssembly를 지원하기 시작했다. WebAssembly 줄여서 wasm은 프로그래밍 언어가 아닌 브라우저에서 실행가능한 새로운 형식의파일 형식이며 .wasm 확장자를 사용한다. wasm 파일은 기존에 사용하던 여러언어들을 .wasm 파일로 컴파일하여 사용 가능한데 2024년 기준 wasm으로 변환 가능한 언어는 다음과 같다. 더보기더보기 wasm으로 인해 javascript로 작성한 프로그램이 아니더라도 브라우저에서 실행이 가능한데, 예를 들어구글에서 만든 이미지 압축 사이트 squoosh가 c++로 작성한 사이트이다. https://squo..

Project 2025.02.27

node.js 웹 서버 라우터 구성하기

/ src / app.js 구성 app.js 파일이란 server.js, index.js 등의 다양한 이름을 가지며주로 node.js 에서 서버에 진입하는 진입점 파일로써 사용된다. 전반적인 서버의 구성과 라우터 처리 및 서버 설정등을 설정하는 용도의 파일로만들고자 하는 사이트의 규모에 따라 극단적인 경우에는 app.js 파일과 html 파일들만으로 사이트를 구성하는 것도 가능하다. 제작할 wargame 사이트에서 필요한 페이지 등을 처리하기 위해 대략적으로 그 구조와 라우터 처리를 이번 포스트에서 다룰 것이며 app.js 파일의 코드는 다음과 같다. const express = require("express");const path = require('path');require("dotenv").conf..

Project 2025.02.27