웹 애플리케이션 보안은 온라인 서비스를 사이버 위협으로부터 보호하는 데 매우 중요합니다. 이 가이드는 웹 애플리케이션 보안의 원칙, 일반적인 취약점 및 애플리케이션 보안을 위한 모범 사례를 살펴봅니다.
안전한 코딩 관행, 정기적인 테스트 및 사고 대응 계획의 중요성에 대해 알아보세요. 조직이 디지털 자산을 보호하고 사용자 신뢰를 유지하려면 웹 애플리케이션 보안을 이해하는 것이 필수적입니다.
조직과 개발자는 로드 밸런서, 캐시, 데이터베이스, 보안 키 저장소를 포함한 생태계의 모든 요소를 분산시켜 공격에 대비해 중복성을 확보함으로써 웹 애플리케이션의 복원력을 높일 수 있습니다. 이 경우, 공격을 받는 시스템의 한 반복이 시스템의 모든 인스턴스를 제거하지는 않으며, 웹 애플리케이션은 계속해서 기능을 수행합니다.
 웹 애플리케이션 보안의 필요성
기업들은 수천 개의 웹 애플리케이션과 해당 애플리케이션 프로그래밍 인터페이스(API)를 소유하고 사용하며 서비스합니다. 이들은 민감한 데이터가 위험에 노출된 프로세스와 저장소에 연결됩니다. 소비자가 원하는 기능을 추가하기 위해 애플리케이션이 자주 업데이트되기 때문에, 새로운 취약점이 애플리케이션에 코딩될 위험이 항상 존재합니다. 웹 애플리케이션은 플러그인과 위젯에 대한 제3자 공격에도 노출됩니다.
궁극적으로 모든 것이 웹 애플리케이션이거나 곧 그렇게 될 것입니다. 마이크로소프트의 Windows 11과 Office365는 웹을 통해 제공됩니다. 사용자 시스템에 주로 설치되는 소프트웨어는 극히 적습니다. 웹 애플리케이션에 대한 모든 공격은 범죄자들이 또 다른 취약점과 기회를 발견하는 계기가 될 수 있습니다.
10가지 일반적인 웹 애플리케이션 보안 위협
웹 애플리케이션에 대한 구체적인 위협으로는 크로스 사이트 스크립팅(XSS)과 소비자를 속여 요청을 하도록 유도하는 위조 공격이 있습니다. 범죄자가 계정을 탈취하면 소중한 데이터를 훔치거나 변경하거나 삭제할 수 있습니다.
- 공격자는 공격을 자동화하기 위해 봇을 사용합니다. 사용자 이름과 비밀번호 등 수백만 건의 도난된 인증 정보를 무기로 삼아, 그들은 신속하게 "인증 정보 채우기(credential stuffing)"를 활용하여 로그인 정보를 입력하고 일치하는 정보를 찾습니다. 무단 접근 권한을 획득하면 사용자 접근을 제어하거나, 사기성 구매를 실행하거나, 사용자 데이터를 훔칩니다.
 - 일부 범죄 해커들은 웹 스크래핑 도구를 사용하여 페이지 콘텐츠를 훔쳐 피해 사이트와 경쟁하는 다른 전자상거래 사이트에 경쟁력 있는 가격을 설정합니다.
 - 위협 행위자들은 애플리케이션 프로그래밍 인터페이스(API)를 공격하여 API를 통해 악성 코드 기반 공격을 앱으로 전송하거나 중간자 공격(Man-in-the-Middle, MitM)을 설정하여 데이터를 가로챕니다.
 - 웹 애플리케이션에서는 제3자 및 공급망 공격이 흔합니다. 공격자는 봇을 이용해 통제권을 장악하고, 시스템이나 페이지를 통과하는 신용카드를 탈취하여 사기 구매에 사용합니다.
 - 공격자는 웹 애플리케이션에 인접한 소프트웨어 및 인프라의 결함을 이용하여 접근하여 침해할 수 있습니다.
 - SQL 인젝션 공격은 백엔드 데이터베이스에 악성 SQL 쿼리 코드를 삽입하여 제어합니다. 공격자는 데이터베이스 또는 기본 운영 체제의 관리 권한을 장악합니다.
 - 사이버 범죄자들은 원격으로 코드를 제어하고 실행할 수 있는 취약점을 찾습니다. 원격 코드 실행(RCE) 공격을 통해 공격자는 애플리케이션의 관리 권한을 장악하고 원하는 작업을 수행할 수 있습니다. 애플리케이션 제어권을 확보한 공격자는 백도어를 설치할 수 있으며, 이는 공격자가 언제든지 다시 접근할 수 있도록 지속적인 통로를 제공합니다.
 - 분산 서비스 거부(DDoS) 공격은 서버가 다운될 때까지 요청으로 서버를 압도할 수 있습니다. 이 과정에서 서버가 다운되면 공격자가 서버를 장악할 수 있습니다.
 - 범죄적 해커들은 코드 삽입이나 버퍼 오버플로 공격을 통해 메모리 손상 취약점을 찾아내 악용함으로써 소프트웨어에 대한 접근권과 제어권을 획득합니다.
 - 쿠키 중독(또는 세션 탈취)은 서버로 전송된 유효한 쿠키를 변조하거나 오염시켜 데이터를 탈취하거나 보안을 우회하거나 둘 다 수행합니다.
 
웹 애플리케이션 보안 솔루션 유형
웹 애플리케이션 보안 솔루션에는 웹 애플리케이션의 트래픽 유입 및 유출을 제어하는 전용 웹 애플리케이션 방화벽(WAF)이 포함됩니다. 웹 애플리케이션 방화벽(WAF)은 알려진 악성 사이트 및 IP를 필터링하고, 트래픽을 모니터링하며, 웹사이트, 애플리케이션 또는 서비스로의 의심스러운 행동이나 악성 HTTP 트래픽을 차단합니다. 데이터 패킷 수준에서 HTTP 트래픽을 검사하면 파일 포함(file inclusion)이나 부적절한 시스템 구성과 같은 웹 애플리케이션의 취약점을 악용하는 공격을 방지할 수 있습니다.
클라우드 서비스 제공업체는 DDoS 공격을 완화하기 위해 트래픽 스크러빙 서비스를 제공하는 경우가 많습니다. 이 서비스는 모든 트래픽이 클라우드 경유 없이 웹 애플리케이션에 도달하지 않도록 보장합니다. 그런 다음 의심스러운 패킷을 실시간으로 감지하여 차단함으로써 정상 트래픽만 웹 애플리케이션에 도달할 수 있도록 합니다.
사이버 범죄자들은 API를 공격하므로, 조직은 무차별 대입 공격을 방지하기 위해 API 로그인 시도 횟수를 제한해야 합니다. 다단계 인증(MFA)는 공격자가 API에서 인증하는 것을 더 어렵게 만듭니다. 전송 계층 보안(TLS) 암호화는 공격자가 API 통신을 침입하는 것을 방지할 수 있습니다.
레거시 보안 도구의 탐지를 우회하기 위해 DNS 트래픽을 이용하는 DNS 기반 공격이 증가함에 따라, 도메인 이름 시스템 보안 확장(DNSSEC) 확장 사양 모음은 DNS와 교환되는 데이터를 보호하는 데 도움이 되었습니다. DNSSEC는 DNS 레코드에 암호화 서명을 추가하여 DNS에 게시된 데이터를 보호합니다. DNSSEC을 사용하면 DNS 리졸버는 클라이언트에 응답을 제공하기 전에 권한 있는 DNS 서버에 대해 서명을 확인하여 진위 여부를 검증합니다.
웹 애플리케이션 보안 모범 사례
웹 애플리케이션이 애플리케이션 개발 파이프라인에서 진화함에 따라 보안 취약점에 대해 조기에 그리고 자주 테스트해야 합니다. 개발 단계의 웹 애플리케이션 보안 테스트에는 규제 평가를 준수해야 하는 내부용 저위험 애플리케이션에 대한 자동화된 테스트인 동적 애플리케이션 보안 테스트(DAST)가 포함될 수 있습니다.
웹 애플리케이션 개발자는 개발 파이프라인에서 보안 버그와 취약점을 식별하기 위해 자동화 및 수동 테스트를 위한 정적 애플리케이션 보안 테스트(SAST)를 사용하여 테스트해야 합니다. 침투 테스트는 중요한 애플리케이션의 취약점을 수동으로 발견하는 또 다른 유용한 도구입니다. 침투 테스트는 비즈니스 로직 오류를 확인하고 공격자가 공격하는 방식을 파악하여 고급 공격 시나리오를 분리합니다. 런타임 애플리케이션 자체 보호(RASP) 테스트는 웹 애플리케이션을 감싸 위협의 실행 및 차단을 실시간으로 테스트합니다.
개발자는 애플리케이션이 취약점을 그대로 간직한 채 성숙된 후에 보안을 덧대기보다는, 보안 기능을 애플리케이션에 내재화해야 합니다. 보안 설계 기법에는 입력 유효성 검사가 포함되며, 개발자는 잘못된 형식의 데이터가 애플리케이션 워크플로에 입력되는 것을 차단합니다. 이는 악성 코드가 애플리케이션에 유입되는 것을 방지합니다.
애플리케이션 코더는 앱이 전송 중 및 저장 시 암호화되도록 해야 합니다. HTTPS는 포트 80을 통한 HTTP 통신을 암호화하므로 전송 중 암호화의 예시입니다.
개발 환경 외부에서 웹 애플리케이션을 보호하려면 다양한 도구가 필요합니다. API 게이트웨이는 IT 부서의 인지 없이 구축 및 사용되는 섀도 API를 식별할 수 있습니다.
결론
웹 애플리케이션은 인터넷에 노출된 환경으로 인해 위협에 취약합니다. 조직은 더 나은 애플리케이션을 설계, 테스트 및 구축함으로써 위협을 완화할 수 있습니다. 개발 및 운영 환경에서 웹 애플리케이션에 패치를 적용하면 취약점을 제거할 수 있습니다. WAF(웹 애플리케이션 방화벽)와 같은 보안 도구는 운영 환경의 웹 트래픽에서 위협을 완화합니다. 운영 중인 애플리케이션은 활성 위협에 대응하도록 설계된 웹 애플리케이션 보안 도구를 사용하여 보호할 수 있습니다.
"FAQs
애플리케이션 수준의 보안은 앱 내 데이터 및 코드 조작을 방지합니다. 이러한 보안 조치에는 개발 단계에서의 애플리케이션 테스트와 운영 환경에서 앱을 보호하는 보안 조치가 포함됩니다.
"개발 중인 소프트웨어 테스트는 웹 보안의 훌륭한 예시입니다. 테스트를 통해 개발자는 취약점을 찾아 수정하여 공격자가 이를 악용하지 못하게 합니다.
"침투 테스트는 누군가가 애플리케이션에 해킹할 수 있는지 확인하는 일반적인 방법 중 하나입니다.
"
