Last Updated on 11월 22nd, 2024, By
 In AppSealing News, 앱실링 블로그

JavaScript는 웹 및 모바일 앱 개발을 위해 전 세계 개발자가 사용하는 가장 인기있는 프로그래밍 언어 중 하나입니다. 설문 조사에 따르면 웹 개발자의 67%가 JavaScript를 사용한 개발을 선호하며, 95% 이상의 웹 사이트에서 사용된다고 합니다. 

그러나 보안 관점에서 본다면, JavaScript는 보안이 취약한 프로그래밍 언어 목록에서 Java, C, PHP 다음인 네번째에 위치합니다 .그렇기 때문에 개발자는 JavaScript 애플리케이션을 개발하고 유지하는 동안에 JavaScript의 안정성을 보장해야 합니다. 

본 글에서는 JavaScript 보안의 주요 원칙과 일반적인 JavaScript 취약점 및 이러한 취약점을 처리하는 방법에 대해 설명합니다.

JavaScript 보안

JavaScript는 웹 애플리케이션, 모바일 애플리케이션, 서버 애플리케이션을 구현하는데 사용되는 가장 기본적인 기술 중 하나입니다. 하지만, 커다란 인기만큼 해커의 가장 일반적인 공격 대상이 되었습니다. 

일반적인 JavaScript 취약점

크로스 사이트 스크립팅(XSS)

브라우저 측면에서 JavaScript의 가장 일반적인 취약점 중 하나는 외부 해커가 취약한 애플리케이션에 악성 코드를 강제로 인젝션시키는 XSS(크로스 사이트 스크립팅)입니다. 최근 연구에 따르면 사이버 공격의 약 40%가 XSS 공격이라고 합니다. 

공격자는 악성 코드를 트리거하기 위해 HTML과 JavaScript 모두 조작할 수 있습니다. XSS 공격은 보안이 취약한 웹 사이트나 애플리케이션이 사용자단에서 악성 코드를 실행하는 주요 수단이 될 수 있도록 만듭니다. 

공격자가 세션 스토리지, 로컬 스토리지 및 쿠키에 쉽게 액세스 할 수 있는 점에서, XSS는 높은 등급의 보안 취약점이라는 점에 유의해야 합니다. 결과적으로 XSS로부터 JavaScript 애플리케이션을 보호하려면 알 수 없는 스크립트를 웹 페이지에 삽입하지 말고 항상 CSS 이스케이프를 사용해야 합니다.

뉴질랜드의 중앙 은행은 XSS 취약점으로 인해 개인 및 상용 금융 데이터 손상을 받은 최근의 해킹 피해자였습니다.

크로스 사이트 위조 요청(CSRF; Cross-Site Request Forgery)

크로스 사이트 위조 요청(또는 CSRF) 공격에서 사용자의 세션 쿠키는 브라우저 세션으로 가장하기 위해 도용되어 사용됩니다. CSRF를 사용하면 공격자는 쉽게 사용자를 속여 악성 코드를 실행하거나 웹 사이트 또는 애플리케이션에 대해 허가받지 않은 행동을 할 수 있습니다. 

CSRF 공격을 시작하는 가장 일반적인 방법은 웹 페이지에 있는 보호되지 않은 모든 form 요소를 찾아 이를 통해 악성 코드를 인젝션하는 것입니다. 해커는 CSRF를 사용하여 웹 사이트에서 사용자의 이메일 주소를 업데이트 한 다음 계정을 탈취하기 위해 비밀번호 변경을 요청할 수 있습니다. 이를 방지하려면 개발자는 웹 사이트의 모든 양식에 CSRF 토큰을 추가해야 합니다.

9~10 심각도를 갖는 CSRF 버그가 글래스도어 웹 사이트에 존재하는 것으로 확인되었습니다. 이 취약점이 악용될 경우에는 해커에게 구직자 프로필 및 고용주 계정에 대한 액세스 및 편집 권한이 부여될 수 있었습니다. 다행히도 이 취약점은 버그 바운티 연구원에 의해 발견되었고, 피해를 입기전에 수정될 수 있었습니다. 

서버측 JavaScript 인젝션

이것은 상당히 새로운 유형의 JavaScript 취약성입니다. 그러다보니 가끔씩 개발자가 관련 위험을 무시하는 경향을 보입니다. 서버측 JavaScript 인젝션 공격을 통해서 해커는 바이너리 파일이 포함된 악성 코드를 웹 서버에 업로드하고 실행할 수 있습니다. 서버단에서 실행되며 주로 NoSQL 및 Node.JS 애플리케이션을 공격 대상으로합니다. 이것은 웹 사이트에 심각한 영향을 미칠 수 있습니다.

Orbit Fox는 Gutenberg 및 Elementor와 함께 작동하는 사이트 구축 기능을 가진 워드프레스  플러그인입니다. 40만 개가 넘는 웹 사이트에서 사용 및 설치된 이 플러그인은 해커가 플러그인이 설치된 웹 사이트에 악성 코드를 삽입하고 제어할 수 있는 두 가지 주요 취약점이 발견되었습니다.

클라이언트측 문제

개발자가 클라이언트측에 외부 API를 도입할 경우, 이로인해 애플리케이션이 외부 공격에 더 취약해질 수 있습니다. 이런 경우는 보통 웹 개발 관행이 좋지 않을 때 발생하는 것이 일반적입니다. 클라이언트측 브라우저 스크립트는 웹 앱에서 웹 브라우저로 직접 반환되는 모든 콘텐츠(사용자 세션 아이디와 같은 민감한 데이터가 있는 쿠키 포함)에 액세스 할 수 있습니다. 이로 인해 해커가 사용자 세션을 가로 채고 민감한 사용자 데이터를 살펴볼 수 있습니다. 

JavaScript 보안 이슈 다루기

JavaScript를 사용하는 가장 큰 장점은 개발 프로세스를 훨씬 쉽고 빠르게 만드는 수 많은 오픈 소스 패키지가 제공된다는 것입니다. 그러나 반면에 이러한 패키지는 해커에게 사용자 데이터를 훔치거나 손상시킬 수 있는 기회를 만드는 취약점의 시작이라고 할 수도 있습니다. JavaScript 취약점으로부터 애플리케이션을 보호하는 가장 좋은 방법은 항상 권장 모범 사례를 따르고 코드에서 문제와 취약점을 효과적으로 감지할 수 있는 정교한 JavaScript 분석기를 사용하는 것입니다.

다음은 JavaScript 애플리케이션의 보안을 강화하기 위해 따를 수 있는 몇 가지 팁입니다.

런타임 애플리케이션 자가 보호(RASP) 채택 

런타임 애플리케이션 자가 보호는 애플리케이션에 대한 공격을 실시간으로 탐지하도록 특별히 설계된 기술입니다. 악의적인 공격으로부터 앱을 보호하기 위해 앱의 동작과 동작의 전체 컨텍스트를 모두 분석합니다. RASP는 앱의 자체 동작을 지속적으로 모니터링하므로 사람의 수동 개입없이 실시간으로 문제를 식별하고 완화시키기 쉬워집니다. 

eval() 함수 사용을 피하기

eval() 함수는 대부분 개발자가 텍스트를 코드의 한 조각으로 실행시키기 위해서 사용되며, 그 자체로 나쁜 코딩 관행이라고 할 수 있습니다. 이것은 JavaScript 애플리케이션을 공격에 노출시켜 보안 위험을 증가시킬 수 있습니다. 따라서 되도록이면 이 함수를 사용하지 말고 보다 더 안전한 기능으로 교체해야 합니다.

SSL/HTTPS로 암호화

이 프로토콜은 클라이언트와 서버측의 데이터를 암호화하여 애플리케이션을 더욱 안전하게 만듭니다. 만약 해커가 귀하의 데이터에 액세스하더라도 암호화된 형태로 되어있어 더 이상 사용할 수 없게 될 것입니다.  동시에 보안 및 암호화된 웹 사이트 페이지에서만 애플리케이션 쿠키 사용을 할 수 있도록 제한하도록 쿠키를 안전하게 설정해야 합니다.

API 보안에 집중

JavaScript 기반 애플리케이션을 개발하는 동안 API 보안에 집중하는 것이 중요합니다. 클라이언트측 JavaScript 애플리케이션에서 API 키를 보호하고 특정 IP 범위에 대한 액세스를 제한하는 것으로부터 시작할 수 있습니다. 

최고의 JavaScript 보안 분석기

JavaScript 보안 분석기는 공격자나 악성 코드 인젝션 공격에 취약한 지 확인하기 위해 내부에서 웹 사이트 또는 애플리케이션을 검사하는데 도움이 되는 보안 도구입니다.

사용할 수 있는 취약점 스캔 도구는 다음과 같습니다.

ZAP

보안 기관 OWASP에서 개발한 ZAP(또는 Zed Attack Proxy)는 귀하의 웹 사이트에 있는 수 많은 취약점을 동시에 스캔 할 수 있습니다. 요구 사항에 따라 커스터마이징 할 수 있으며 사용하기 쉬운 직관적인 인터페이스를 제공합니다.

Grabber

Grabber는 XSS나 SQL 인젝션과 같은 취약성에 대해 웹 사이트와 웹 애플리케이션을 모두 스캔 할 수 있는 또 다른 JavaScript 보안 분석기입니다. 파이썬의 2.5kLOC에서 실행되는 상당히 작은 애플리케이션이므로 소규모 애플리케이션 및 웹 사이트에 더 적합합니다.

Wapiti

Wapiti를 사용하면 POST HTTP 및 GET 요청을 사용하여 공격과 인젝션 벡터를 모두 테스트 할 수 있습니다. 파일 포함, 파일 공개, 약한 아파치 구성, XSS 공격 등을 감지할 수 있습니다. 이것은 명령줄을 통해 실행해야 하는 진보된 도구라는 점에 유의해야 합니다.

잠재적인 JavaScript 보안 문제를 식별하는 것은 애플리케이션과 비즈니스 데이터를 보호하기 위한 첫 번째 단계입니다. 보안에 대한 사전 예방적 접근 방식을 취하고 코드를 배포하기 전에 적극적으로 취약점을 찾아 애플리케이션이 항상 안전하고 최종 사용자에게 가능한 최상의 경험을 제공할 수 있도록 하십시오.


appsealing contact

Dustin Hong
Dustin Hong
Dustin은 잉카엔트웍스의 앱실링 비즈니스 개발을 이끌고 있습니다. 그는 사이버 보안, IT, 컨텐츠 및 애플리케이션 보안 분야의 소프트웨어 개발과 혁신에 많은 관심을 가지고 있습니다. 또한 사이버 보안 세계에서 주요 사건의 대상, 이유 및 방법에 대해 다양한 사람들에게 공유하고 토론하는 것을 좋아합니다. 업계 동향 및 모범 사례에 대한 그의 견해는 기사, 백서에 실려있으며, 여러 보안 행사에서 유사 주제로 발표를 하였습니다.

Leave a Comment