애플리케이션 보안 엔지니어 스킬에 대해 알아보기
학습 목표
이 유닛을 완료하면 다음을 수행할 수 있습니다.
- 애플리케이션 보안이 비즈니스에 미치는 영향을 설명할 수 있습니다.
- 애플리케이션 보안 전문가가 되기 위해 필요한 주요 스킬을 나열할 수 있습니다.
- 일반적인 애플리케이션 보안 시나리오를 서술할 수 있습니다.
애플리케이션 보안이 비즈니스에 미치는 영향
애플리케이션의 취약한 보안은 조직에 매우 부정적인 결과를 야기할 수 있습니다. 사이버 침입자는 돈, 기업 정보, 지적 재산을 빼내어 이득을 취하기 위해 매일 다양한 조직을 공격합니다. 공격자는 가로챈 데이터를 이용하여 무단으로 구매하기도 하고 소비자의 신분을 도용하기도 하죠.
뉴스를 보다 보면 공격자가 애플리케이션을 공격하여 소매업체, 신용 보고 기관, 항공사, 엔터테인먼트 회사, 정부 기관, 학교 및 기타 여러 조직의 컴퓨터 시스템에 저장된 데이터에 액세스했다는 소식을 접할 수 있습니다. 호텔 체인이 외국에 있는 공격자에게 당한 사례가 있는가 하면, 회사 컴퓨터에 설치한 스파이웨어를 이용한 SQL 삽입 공격(이에 대해서는 나중에 알아볼 예정)으로 고객 신용 카드 정보를 빼낸 사례도 있었습니다. 침입자가 취약한 데이터 암호화 시스템을 이용하여 신용 카드 데이터를 훔친 사례도 여러 건 있었습니다. 이런 공격으로 수억 명에 이르는 고객의 개인 정보가 노출되었습니다.
이런 보안 침해는 사기 및 도난으로 인한 직접적인 경제적 영향을 초래했지만, 보안 침해는 평판 손실과 같은 간접적인 경제적 영향도 초래할 수 있습니다. 이 경우 비즈니스는 고객 손실, 주주 신뢰 감소, 브랜드 이미지 손상으로 인해 재정적으로 추가적인 타격을 입을 수 있습니다. 보안 침해는 벌금 및 제재로 이어지는 관련 법률 및 규제의 영향도 받게 됩니다.
애플리케이션 보안 엔지니어는 비즈니스 애플리케이션에서 고객 데이터가 적절하게 보호되도록 보장하는 데 중요한 역할을 해야 합니다. 애플리케이션 보안 엔지니어는 매우 중요한 역할을 담당하기 때문에 광범위한 능력을 보유해야 하죠. 애플리케이션 보안 엔지니어에게 필요한 스킬에 대해 자세히 알아보겠습니다.
애플리케이션 보안 엔지니어 스킬
열대 지방에서 휴가를 즐기기 위해 비행기를 타고 외딴 섬으로 간다고 상상해 보세요. 비행기에 탑승하기 전에 공항에서 여러 보안 검사 지점을 통과해야 합니다. 보안 요원에게 신분증과 탑승권을 확인받고, 금속 탐지기를 통과하고, 수하물을 X레이로 검사하고, 공항 경비견을 지나가고, 보안 요원은 TV 화면을 모니터링하면서 특이한 활동이 없는지 확인합니다. 공항에서는 목적지까지 안전한 여행을 즐길 수 있도록 하기 위해 이런 보안 단계를 거칩니다. 공항의 보안 인력과 마찬가지로, 애플리케이션 보안 엔지니어는 공격자가 침입할 수 있는 지점을 인지하고 각 애플리케이션 개발 및 배포 단계에 취약성을 방지하는 데 필요한 안전 장치를 제공해야 합니다.
보안 협회인 (ISC)²와 ISSA(Information Systems Security Association International, 국제 정보 시스템 보안 협회)의 보고서에서는 수년 동안 악화되어 온 사이버 보안 기술 부족에 대해 설명합니다. 보안 사고가 증가함에 따라 애플리케이션 및 데이터를 보호할 애플리케이션 보안 전문가의 필요성이 급격하게 증가했습니다. 또한 애플리케이션 보안 엔지니어는 상대적으로 더 많은 교육을 받는다는 사실에 비춰 볼 때 애플리케이션 보안 엔지니어는 종종 애플리케이션 개발자보다 돈을 더 많이 벌기도 합니다.
애플리케이션 보안 엔지니어는 애플리케이션 소프트웨어 개발 라이프사이클(SDLC)의 여러 단계에 다양한 기법을 사용하여 보안 취약성을 확인할 수 있습니다. 이를 위해 애플리케이션 보안 엔지니어는 다음과 같은 여러 기술적 스킬을 숙달해야 합니다.
- 위협 모델링: 공격자가 시스템 보안을 침해할 수 있는 방법과, 공격자에게 대응하기 위해 필요한 보호 장치에 대해 생각합니다.
- SSDLC(보안 소프트웨어 개발 라이프사이클): 보안 코딩 표준, 기법 및 모범 사례를 통해 개발자가 취약성을 최소화하는 보안 수준이 높은 코드를 작성할 수 있게 지원합니다.
- 보안 코드 검토: 애플리케이션을 프로덕션 환경에 배포하기 전에 소스 코드의 보안 취약성을 파악합니다.
- 취약성 테스트 및 분석: 애플리케이션이 배포된 후 취약성을 발견하고 개발 팀에 교정에 대해 조언합니다.
애플리케이션 보안 엔지니어는 다양한 인력(애플리케이션 개발자, 테스터, 디자이너 등)과 함께 일하기 때문에 협업하고 소통하는 데 능숙해야 합니다. 기술 관련 연구 결과를 설명하는 문서를 작성하므로 작문 능력도 우수해야 합니다. 경우에 따라서는 애플리케이션을 배포하기 전에 특정 보안 기능을 설치해야 하는 이유를 경영진이 납득할 수 있게 설득력을 발휘해야 할 수도 있습니다. 종종 비판적 사고 능력을 이용하여 침입자가 애플리케이션 공격을 시도할 다양한 방법을 예측하기도 해야 합니다. 그런 다음 잠재적인 공격을 방어할 수 있는 창의적인 해결 방법을 찾아야 합니다. 침입이 발생하면 사고를 조사하여 보안 침해의 원인을 확인하고 향후 공격에 대비해 애플리케이션 보안을 강화하는 데 기여해야 합니다.
위에 나열된 스킬 외에, 애플리케이션 보안 엔지니어는 다음과 같은 증명서를 획득하여 지식 수준을 높일 수 있습니다.
- GWEB(GIAC Web Application Defender)
- CSSLP(Certified Secure Software Lifecycle Professional)
- SSP(Secure Software Practitioner)
- CASE(Certified Application Security Engineer)
- 고급 웹 공격 및 악용
애플리케이션 보안 전문가로서의 경력을 고려하고 있다면 대학교에서 컴퓨터 공학 학위를 수여하면 좋은 출발점이 될 수 있습니다. 애플리케이션 보안 엔지니어는 종종 애플리케이션 개발자로 시작한 후 사이버 보안 분야로 전환하기 때문이죠. 여러 대학교에서는 사이버 보안 학위를 제공하기도 합니다. 사이버 보안은 확실히 많은 기회가 있는 전망이 밝은 분야입니다.
지금까지 애플리케이션 보안 엔지니어가 되기 위해 필요한 스킬에 대해 알아보았습니다. 이제 애플리케이션 보안 엔지니어가 일반적으로 직면하는 보안 시나리오와 이런 상황에서 애플리케이션을 보호하는 방법에 대해 알아보겠습니다.
일반적인 애플리케이션 보안 시나리오
사이버 범죄자는 최소한의 노력으로 가장 큰 보상을 얻기 위해 데이터를 훔치거나 수정하거나 삭제할 가장 쉬운 액세스 경로를 찾습니다. 애플리케이션이 복잡할수록 보안 취약성을 포함하고 있을 가능성이 큽니다. 애플리케이션, 특히 웹 애플리케이션은 침입자가 컴퓨터에 저장된 중요 정보에 액세스하기 위해 이용할 수 있는 공격 표면(사용자 인터페이스)이 가장 크고 악용하기가 비교적 쉽기 때문에 사이버 범죄자의 표적이 됩니다. 칩입자는 웹 애플리케이션을 공격하는 데 특별한 도구도 필요하지 않습니다. 컴퓨터와 인터넷 연결만 있으면 됩니다.
공격자는 애플리케이션에 침투할 방법을 알아내려고 하는 반면, 애플리케이션 보안 엔지니어는 고객 계정 및 데이터에 대한 무단 액세스를 차단하기 위해 애플리케이션 코드의 취약성을 최소화하고 애플리케이션 구성 요소가 높은 보안 수준으로 구성되도록 하는 데 집중합니다. 애플리케이션 보안 위험을 검토할 때 참고할 수 있는 중요한 리소스 중 하나는 OWASP(Open Web Application Security Project)입니다. OWASP는 소프트웨어 보안 개선에 초점을 맞춘 정보를 무료로 제공하는 국제 조직입니다.
그렇다면 애플리케이션 보안 엔지니어가 흔히 직면할 수 있는 위험은 무엇일까요? 삽입 공격은 좋은 예이며, 애플리케이션 입력을 충분히 정화하지 않는 경우에 발생합니다. 삽입 공격에서 침입자는 올바른 입력 데이터 대신 입력 처리 로직(최종 사용자 인터페이스와 데이터베이스 사이의 통신을 관리하는 코드)에 코드를 삽입합니다.
애플리케이션 코드가 잘못 작성된 경우, 애플리케이션은 공격자가 삽입한 코드를 실행합니다. 예를 들어 흔히 SQL이라고 하는 구조적 쿼리 언어가 웹 페이지의 이메일 주소 필드에 입력될 수 있습니다. SQL은 프로그래밍에 사용하는 언어이며, 데이터를 관리하도록 고안되었습니다. 입력 필드에 대한 확인이 없는 경우 공격자가 SQL 코드를 사용하여 (건강 기록 같은) 정보를 애플리케이션 데이터베이스에서 빼낼 수 있습니다.
사용자 입력을 정화하려면 애플리케이션은 사용자 입력을 명령이 아닌 데이터로 처리하고 허용 목록(허용 목록이란 시스템 액세스가 허용된 문자의 목록임)에 있는 문자만 포함하도록 해야 합니다. 허용 목록을 사용하면 허용 목록에 포함된 요소와 최대 데이터 필드 길이를 초과하지 않는 요소를 제외한 기타 모든 요소의 액세스가 거부됩니다.
이외에도 애플리케이션 보안 엔지니어는 개발 프로세스 도중에 위에서 설명한 삽입 공격을 방지하기 위해 사용자 입력이 올바르게 정화되도록 코드를 검토, 테스트 및 확인해야 합니다. 이 책임은 애플리케이션 기능을 다른 개발 방법보다 더 빨리 제공하는 것을 목적으로 하는 에자일 소프트웨어 개발(영문) 상황에서 특히 중요합니다. 하지만 에자일 방법을 사용하면 최종 사용자의 기대를 계속 충족하기 위해 애플리케이션을 지속적으로 업데이트해야 하기 때문에 더 복잡해집니다. 개발자는 빠른 속도로 새 기능을 제공하고 발견된 버그를 수정할 것으로 기대되기 때문이죠. 애플리케이션 보안 엔지니어의 임무는 애플리케이션 보안을 강화하여 악용을 방지해야 하고, 가장 효율적인 방법을 개발팀에 조언하는 것입니다.
취약하거나 존재하지 않는 암호화도 공격자에게 중요한 데이터를 노출할 수 있는 또 다른 일반적인 애플리케이션 보안 허점입니다. 애플리케이션은 데이터를 일반 텍스트로 전송하는 HTTP와 같은 프로토콜을 사용할 때 취약합니다. 대신 애플리케이션은 데이터 전송을 암호화하는 HTTPS와 같은 보안 프로토콜을 사용하여 적절한 암호 해독 키 없이는 데이터를 읽을 수 없게 해야 합니다. 오래되고 취약한 암호화 알고리즘과 내부에서 개발한 암호화 기능도 지양해야 하죠. 그 대신 애플리케이션 보안 엔지니어는 보안이 강력한 표준 기반 암호화 알고리즘을 이용해야 합니다.
애플리케이션 보안 엔지니어는 개발자가 보안이 강력한 SDLC 프로세스를 따를 수 있게 지원합니다. 그리고 강력한 인증 및 권한 부여 기능을 제공하고 보안 세션 관리를 이용하여 무단 액세스를 방지하는 등의 잘 알려진 보안 실천 방법에 기반한 애플리케이션 설계 및 아키텍처 기법을 채택합니다.
애플리케이션 보안 엔지니어는 사용자가 기본 자격 증명으로 로그인할 수 없는 애플리케이션을 배포합니다. 기존 자격 증명을 사용한 로그인은 흔한 공격 경로이기 때문입니다. 그리고 사용자 입력을 정화하여 삽입 공격을 방지합니다. 약한 암호화로 인해 공격자가 데이터 보안 침해에 성공하는 경우가 있으므로, 애플리케이션 보안 엔지니어는 적절한 암호화 키 관리와 함께 강력한 알고리즘을 사용하여 데이터 전송과 저장된 데이터(미사용 데이터)를 암호화합니다. 그러면 공격자가 시스템에 침입해도 데이터를 해독하는 방법을 모르기 때문에 유용한 정보를 추출할 수 없게 되는 것이죠.
애플리케이션 보안 엔지니어는 중요한 정보가 사용자에게 공개되지 않도록 오류가 올바르게 처리되는지 확인합니다. 또한 애플리케이션 개발 도중과 후에 정적 및 동적 애플리케이션 보안 테스트를 수행하여 애플리케이션 배포 후에 이상 활동이 발생하는지 모니터링하기도 합니다.
요약
이 유닛에서는 애플리케이션 보안 침해가 비즈니스에 어떤 영향을 미칠 수 있는지, 애플리케이션 보안 엔지니어에게 어떤 스킬이 필요한지에 대해 알아보고 일반적인 애플리케이션 보안 시나리오를 살펴보았습니다. 다음에는 모든 유능한 애플리케이션 보안 엔지니어가 이행하는 첫 단계인 환경 내 애플리케이션과 관련 위험을 파악하는 단계에 대해 알아보겠습니다.