
웹 애플리케이션 가시성은 보안 전문가가 소프트웨어의 프런트 엔드나 클라이언트에 대하여 가지고 있는 통제권을 의미한다. 과거에는 코드를 처음부터 작성했으나 최근에는 미리 작성된 코드와 자바스크립트 라이브러리를 이용하여 애플리케이션을 만든다.
코드는 스스로 작성한 코드, 재이용되는 코드, 누군가 추가한 코드, 사내 라이브러리 코드, 외부 소스 코드 등 다양한 코드의 짜깁기 형태를 띤다. 이런 현상은 가시성을 떨어뜨릴 수 있어, 애플리케이션 보안 전문가의 웹 애플리케이션의 보안 분석 작업에 어려움을 더한다.
실제로 많은 해커 세력이 사이버 공격을 개시할 때, 코드를 복잡하고 혼란스럽게 만드는 고전 방법을 동원한다. 웹 애플리케이션의 경우 해커들은 스트링 난독화나 베이스 62 인코딩을 이용하여 범죄 행위를 숨기고 시그니처 스트링 탐지 기법을 우회한다.
자바스크립트 라이브러리에 심은 악의적 스크립트들은 이런 방식으로 잘 숨겨져 있어 코드 리뷰 같은 전통적 애플리케이션 보안 기법으로는 발견하기 어렵다. 악의적 코드가 발견되지 못하고 실행될 경우 메이지카트, 폼재킹이나 사이트 간 스크립팅 등의 스키밍 공격에 당할 수 있다.
이에, 사이버 보안 전문 매체 Security Boulevard는 코드의 가시성은 보안의 가장 중요한 요소 중 하나라고 강조한다.
우선, 매체는 웹 애플리케이션 가시성 파악 방법 10가지를 아래와 같이 전달했다.
1. 애플리케이션, 폼, 시스템, 데이터 등 어떠한 디지털 자산이 있는지 파악하라.
2. 제3자, 4자의 코드 소스까지, 이용된 모든 기술을 파악하라.
3. 각 자산의 목적, 의도, 운영 요소를 파악하라.
4. 각 기술의 목적, 의도, 운영 요소를 파악하라.
5. 자산별 접근 권한자를 파악하라.
6. 각 자산을 통제하는 현 보안 절차를 점검하라.
7. 자산별 보안 절차의 효과를 검증하라.
8. 자산별 취약점을 파악하라.
9. 자산별 PCI, GDPR, HIPPA 같은 준법 규정을 파악하라.
10. 잠재적 공격에 대비한 손실 완화 전략 코드를 작성하라.
디지털 자산에 대한 분석이 끝났다면 이제 가시성을 높일 수 있는 여러 기법과 툴에 대하여 알아보자. 각각의 방안은 장단점이 있으니 자세히 살펴보기를 바란다.
첫 번째 방법으로 클라이언트 측 공격 표면 관리 기법을 활용할 수 있다. 클라이언트 측 공격 표면 관리 기법은 상대적으로 새로운 사이버 보안 기술로 자동적으로 모든 웹 애플리케이션 자산을 찾는다. 그리고 자산별 데이터 접근권을 보고한다.
이 기법은 헤드리스 브라우저와 인공 유저를 이용하여 웹 사이트나 애플리케이션 페이지 속 모든 자바스크립트를 탐색한다. 웹사이트가 최종 사용자 관점에서 작동하는 방식을 실시간으로 수집한다.
클라이언트 측 공격 표면 관리기법은 다른 웹 애플리케이션 가시성 향상 기법에 존재하는 많은 문제를 피할 수 있어 적용 범위가 매우 넓다. 사실, 클라이언트 측 공격 표면 모니터링 기법은 아래에 나와 있는 방법보다 훨씬 좋은 가시성을 제공한다.
만약 현재 운영 중인 사업에서 웹 애플리케이션이나 웹사이트를 소비자와의 소통 수단으로 활용한다면, 클라이언트 측 공격 표면 모니터링 기법은 클라이언트 측에 발생할 수 있는 사이버 위협에 대응할 수 있는 좋은 방법이 될 것이다.
클라이언트 측 공격 표면 관리법은 보안 분석가나 웹 애플리케이션 개발자들이 며칠에 걸쳐 해야 하는 일을 단 몇 분 만에 처리한다. 자동화된 경고 시스템과 자세한 이슈 목록은 보안 팀들이 클라이언트 측 보안 태스크를 그 어떤 방법보다 많이 자동화할 수 있다.
두 번째 방법으로 ‘펜 테스팅(Pentesting)’이라고도 칭하는 ‘침투 테스트(penetration test)’를 언급할 수 있다. 펜테스팅은 허가를 받고 의도적으로 공격하여 보안 취약점을 찾는 방법을 의미한다. 애플리케이션 보안 전문가가 웹 애플리케이션의 보안 정책을 확인하고 미확인 버그가 존재하는지 검증하도록 지원한다.
하지만 고도의 기술이 필요한 영역으로 시간과 노동력이 많이 투입되어야 한다. 때로는 외부 보안 전문가를 불러 테스트를 시행해야 될 때도 있다.
침투 테스트는 또한 테스트한 시점의 보안 상황만 볼 수 있다는 단점이 존재한다. 웹 애플리케이션은 계속해서 새로운 기능이 추가되며, 코드 안에는 꾸준히 업데이트되는 외부 라이브러리가 존재하기 때문에 침투 테스트는 웹 애플리케이션 가시성을 지속적으로 확보하기에는 한계가 존재한다.
세 번째 방법으로 클라이언트 측 취약점 스캐닝을 활용할 수 있다. 취약점 스캐너는 컴퓨터, 소프트웨어, 애플리케이션, 서버, 네트워크를 분석하여 해커들이 악의적인 의도로 이용할 수 있는 취약점이나 잘못된 구성이 존재하는지 파악한다. 취약점 스캐너는 백엔드 코드와 시스템을 스캔하여 작동하며, 보통 서버 측 디지털 자산을 분석한다. 스캐너는 자바스크립트 버그와 같이 웹 애플리케이션 내에 존재하는 모든 취약점을 탐지하지 못한다는 점과 싱글 도메인만 볼 수 있다는 단점이 있다.
네 번째 방법은 콘텐츠 보안 정책 (Content Security Policies) 활용이다. 콘텐츠 보안 정책은 클라리언트 측에 적용되는 정책들로 웹 애플리케이션에 악의적인 스크립트가 추가되지 않도록 방지하고 찾아낸다.
CSP는 XSS< 자바스크립트 인젝션, e스키밍 같은 공격이 발생하기 전에 위협적인 스크립트를 막을 수 있다. CSP는 그 안에 자바스크립트 허가권 요소가 고려되어 개발되면 굉장히 중요한 툴이 되지만 단순히 보안 통제용으로 이용할 경우 e스키밍 공격에 노출될 수 있다는 단점이 있다.
마지막으로 웹 애플리케이션 방화벽(WAF)을 살펴볼 수 있다. 웹 애플리케이션 방화벽은 애플리케이션과 인터넷 사이를 오가는 HTTP 트래픽을 모니터링하고 필터링하여 웹 애플리케이션을 보호한다. 웹 애플리케이션 방화벽은 웹 앱 가시성을 높이는 데 효과적이다.
개방형 시스템 상호 연결(OSI) 모델 7 레이어 방어 메커니즘이기 때문에 브라우저 수준의 유저 인터페이스 자체를 보호하기 위하여 설계되지는 않았다. 또한 드라이브-바이 스키밍(drive-by skimming), 사이드로딩, 체인로딩 등의 진화한 스키밍 공격은 대비하지 못한다.
[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]