What Is JavaScript?

Javascript는 1995년 출시되었으며 전세계적으로 널리 (11위) 이용되는 프로그래밍 언어이다. 언어의 특징으로는 high-level며 인터프리터 형태이다. 특히 웹 페이지를 동적(Dynamic)으로 구현할 때 매우 유용하게 사용된다. 대표적으로 양식을 제출하거나, 유효성을 검증, 사용자의 상호작용, 애니메이션 등의 추가기능을 제공한다. 

이러한 기능들은 보통 HTML 페이지에 자바스크립트 함수가 내장되는 형식으로 제공되며, 해당 페이지의 DOM(Document Object Model)과 연관이 깊다. 자바스크립트는 종종 이름 때문에 '자바'와 혼동되는 경우가 많다. 둘다 비슷한 문법을 가지고 있긴 하지만 실상은 전혀 다른 언어이므로 주의하도록 하자. 자바스크립트는 웹 브라우저 기반의 애플리케이션 뿐만 아니라, 최근에는 모바일 플랫폼에서도 널리 이용되고 있으며 심지어는 Node.js 등의 server-side 코드로 사용되기도 한다.


JavaScript Security

사실 자바스크립트와 관련한 보안 문제는 꽤 오래전부터 공공연히 알려져있다. JavaScript가 DOM을 이용하는 과정을 간파하고 있는 악의적인 사용자가, 악성 스크립트를 웹에 주입해놓으면 클라이언트의 컴퓨터에서 작동하게 된다. 이러한 위협을 막기 위해서는 두가지 정도의 대응방안이 있다. 첫째는 스크립트를 수행할 때 샌드박싱(Sandbox)를 통해 별도의 특정 리소스에만 액세스 권한을 주되 나머지 부분에는 영향을 미치지 못하도록 격리시키는 것이다. 둘째는 각각의 개별 사이트로부터 작동되는 스크립트는 서로의 데이터에 접근할 수 없도록 하는 규칙을 기반으로 설계하고 구현하는 것이다. 이러한 두가지 원칙에도 불구하고, 오늘날 대부분의 JavaScript 보안 취약점은 브라우저 개발자가 이러한 기본 원칙을 다소 느슨하게 적용하는 순간 발생하게 된다.


Common JavaScript Security Vulnerabilities

가장 흔히 악용되는 자바스크립트 관련 보안 취약점은 Cross-Site Scripting(XSS)이다. 이는 공격자가 웹 사이트를 조작하여 악성 스크립트를 다수의 이용자에게 광범위하게 영향을 미칠 수 있도록 한다. 그러한 스크립트는 공격자가 설계한 방식으로 클라이언트 측에서 실행된다. 결국 XSS는 브라우저 또는 웹 사이트 개발자가 적절한 시큐어코딩 정책을 구현하지 못한 상태에서 발생하게 되며, 데이터 기밀성 침해, 계정 변조, 악성코드 유포 또는 임의의 원격 제어를 유발하게 되는 굉장히 위험한 공격기법이다. 

또 다른 취약점은 CSRF(Cross-Site Request Forgery)이다. 이는 공격자가 희생자의 브라우저를 조작하여 특정 사이트에서 의도하지 않은 동작을 하도록 만든다. 이는 특히 쿠키를 사용하여 사용자를 인증하는 사이트에서 잘 발생하며, 쿠키의 전달 요청을 임의로 조작하는 방식으로 이루어진다. 이로 인해 계정 탈취, 데이터 기밀성 침해, 사기 거래 등이 발생할 수 있다.

위에서 언급한 XSS와 CSRF 취약점은 모두 Application Layer에서 발생하며, 이를 방지하기 위해서는 안전한 설계와 시큐어코딩 구현이 요구된다. 


그 외에도 더욱 다양한 취약점들이 존재한다. 대부분은 클라이언트-서버 사이의 부적절한 신뢰관계, 브라우저 및 브라우저 플러그인 코드의 취약점, 샌드박싱이나 same origin policy에 대한 잘못된 구현 때문에 발생한다. 또한, Node.js 기반의 server-side 응용프로그램의 경우 SQL 인젝션이나 명령어 삽입 등의 추가적인 위협이 발생할 가능성이 더 크다. 때문에 Javascript에 대한 보안 문제를 항상 인지하고 적절하게 대응하는 것만이 위협을 최소화할 수 있는 방책이다. 대부분의 개발업체들은 Javascript 취약점 진단 툴을 사용하여 이러한 문제들을 테스트하고 수정하는 것으로 알려져있다.


JavaScript Security Analyzers

자바스크립트 취약점 분석기는 클라이언트측 응용 프로그램의 보안성을 평가하는 툴이라고 생각하면 된다. 이러한 진단도구를 사용하면 JavaScript 자체의 취약점, 구현상의 문제점, 잘못된 환경설정 등 공격자가 악의적으로 이용할 소지가 있는 부분들을 테스트하고 고쳐야하는 부분을 지적해준다.


Veracode 등에서 이러한 서비스를 제공하고 있으니 참고.

CPUU님의 창작활동을 응원하고 싶으세요?