웹 어플리케이션에서의 보안 위협
이 섹션에서는 웹 애플리케이션의 보안 취약점에 대해 설명합니다.
- 자바스크립트는 인터프린터 언어이기 때문에 컴파일된 코드에 비해 보호 기능이 부족합니다.
- 공격자가 쉽게 코드를 분석 및 수정할 수 있으며 코드 인제션에 대한 보안 기능이 없습니다.
- 크로스 사이트 스크립팅(XSS)은 공격자가 애플리케이션 컨텍스트 내에서 임의의 코드를 실행하여 민감한 정보, 사용자 자격 증명에 액세스하고 웹 애플리케이션 내에서 가능한 모든 작업을 수행할 수 있는 일반적인 취약점입니다.
- 브라우저에 보안 저장소 옵션이 없으면 암호키가 하드코딩되어 브라우저 저장소가 악성 스크립트에 의한 데이터 수집에 취약해집니다.
모던 웹 기술: Web Crypto API와 IndexedDB
이 섹션에서는 Web Crypto API와 IndexedDB에 대해 설명합니다.
- 웹 브라우저의 Web Crypto API는 외부 JavaScript 종속성 없이 브라우저에 내장된 공통 암호화 기능을 제공합니다.
- Web Crypto API에 의해 생성된 키의 메타데이터 정보는 JavaScript 환경에 노출되지만 키의 내용은 노출되지 않는 등 몇 가지 보안상의 이점을 제공합니다.
- Web Crypto API에서 키를 생성할 때 추출 가능한 속성을 false로 설정하여 키를 JavaScript 환경 밖으로 내보낼 수 없도록 할 수 있습니다. 또한 Web Crypto API는 키의 용도를 특정 용도로만 사용하도록 지정할 수도 있습니다.
- CryptoKey 객체는 IndexedDB 스토리지에 직접 저장할 수도 있습니다.
하지만 Web Crypto API를 서비스에 적용할 때 몇 가지 제약이 있습니다.
- 첫째, Web Crypto API의 표준 사양은 브라우저 저장소에 암호화된 암호화 키를 저장하는 메커니즘을 명시적으로 제공하지 않습니다.
- 둘째, 서버에서 키를 프로비저닝하려면 클라이언트 수준에서 별도의 언래핑 키가 필요한데, 이 키는 사용자의 입력이나 비밀번호에서 pbkdf와 같은 키 파생 함수를 사용하여 파생할 수 있지만 사용자 경험을 저하시킬 수 있습니다.
화이트박스 암호화 알고리즘
이 섹션에서는 화이트박스 암호화 알고리즘에 대해 설명합니다.
- 화이트박스 암호화는 암호 연산 중에도 키가 노출되지 않는 기술입니다.
- 암호화 구현과 알고리즘을 보호하고 플랫폼 전반에서 커스터마이즈된 암호화 API를 구현할 수 있습니다.
- 암호키는 암호 알고리즘에 이미 수학적으로 연산되어 있어 본질적으로 추출하기 어렵고, 인메모리에서도 일반 텍스트 형식으로 노출되지 않습니다.
- 화이트박스 암호화 기술은 리버스 엔지니어링과 DBl(Dynamic Binary Instrumentation)에 대한 향상된 저항성을 제공합니다.
- 화이트박스 암호는 웹 애플리케이션에 대한 심층 방어를 제공하는 핵심 기술로, 직접적인 액세스에 대한 추가적인 보호 계층을 제공하여 비밀키의 내용을 알 수 없도록 하며, 보안 키 프로비저닝에도 사용될 수 있습니다.
LTSM(Line Trusted Security Module) WASM 아키텍쳐
이 섹션에서는 화이트박스 기반의 공통 암호화 API와 FIDO2, 키 증명 등 인증 프로토콜을 위한 하드웨어 기반 보안 기능을 제공하는 보안 모듈인 LTSM WASM 아키텍처에 대해 설명합니다.
그리고 메모리 세이프티(Memory Safety), Undefined Behavior Sanitize, Address Sanitizer, 제어 흐름 무결성(Control-Flow Integrity) 등 최신 보안 기능과 함께 샌드박스 환경에서 C/C++ 및 Rust 코드를 거의 네이티브 수준의 성능으로 실행할 수 있는 웹 어셈블리(WASM)와 모듈의 연동 방법에 대해 자세히 설명합니다.
LTSM WASM 모듈은 C++로 작성되고 Emscripten 및 Embind를 사용하여 WASM 모듈로 컴파일됩니다.
유스케이스에 대한 설명
이 섹션에서는 라인 크롬 확장 프로그램에서 LTSM을 적용한 유스케이스로 시큐어 스토리지, 트랜잭션 서명, 종단간 암호화가 소개되었습니다. LTSM의 시큐어 스토리지는 브라우저의 로컬 스토리지에 의존하며, 데이터 암호화에 사용되는 암호키는 서버로부터 프로비저닝됩니다. 트랜잭션 서명은 서버가 서명된 트랜잭션 외에 모두 거부하며 인가된 클라이언트만 API를 호출할 수 있도록 합니다. 종단간 암호화로는 라인의 엔드투엔드 프로토콜인 레터 실링(Letter Sealing)이 사용되며, 레터 실링의 개인키는 화이트박스 암호 기반으로 구현되어 안전하게 보호됩니다.
화이트박스 통합 이슈
화이트박스 암호화를 사용하는 경우 개발자가 키에 직접 접근하거나 조작할 수 없어 일반적인 구현보다 보안 기능 구현이 까다롭다고 합니다. 라인에서는 이러한 문제를 해결하기 위해 화이트박스에서 제공하는 툴체인 도구인 Key Export Tool를 활용하였습니다.
이어서 패딩 이슈와 룩업테이블, 그리고 클램핑 이슈의 해결 방법에 대해 다루고 있는데, 이 부분부터는 저도 이해하기 어려운 기술적인 내용이었습니다.
or
'개발' 카테고리의 다른 글
[옵시디언 플러그인 개발] 다국어 지원 추가하기 (2) | 2024.02.09 |
---|---|
터미널 명령을 사용하여 특정 텍스트를 포함하는 모든 파일 삭제하기 (2) | 2024.02.08 |
OpenAI에서 드디어 ChatGPT API와 Whisper API 공개했습니다. (0) | 2023.03.02 |
Tailwind CSS와 함께 Next.js 시작하기 (0) | 2023.02.28 |
오라클 클라우드 VM 머신 메모리 늘리기 (2) | 2023.02.07 |