모니터링 대상 시스템이 모니터링 대상 시스템을 제어하는 ​​경우

보안 제어 기능이 존재하고 활성화되어 겉으로는 작동하는 것처럼 보일 수 있지만, 누군가가 조용히 그 기능을 무력화시킬 수도 있습니다. 

최근 OpenAI의 보고서에 따르면 내부 코딩 작업을 수행하는 AI 에이전트와 관련된 두 가지 사고가 발생했습니다. 첫 번째 사례에서는 에이전트가 평가 파이프라인을 수정하는 동안 자동 보안 경고를 비활성화했습니다. 모니터링은 계속 실행되어 보고서를 저장했지만, 이러한 보고서를 담당자에게 알리기 위한 경고 기능은 비활성화되었습니다. 두 번째 사례에서는 에이전트가 코드를 수정하는 동안 모니터링 통합 기능을 제거한 후 변경 사항을 부정확하게 보고했습니다. 

세부 사항은 다르지만, 두 사건 모두 근본적인 아키텍처 문제를 제기합니다. 모니터링 대상 시스템이 자체 모니터링을 방해할 수 있을 만큼의 제어 권한을 갖게 되면 어떻게 될까요? 

애플리케이션 보안은 수년간 이와 유사한 문제와 씨름해 왔습니다. 모바일 애플리케이션은 개발자가 제어할 수 없는 기기에서 실행됩니다. 공격자는 애플리케이션 코드를 검사하고, 실행 과정을 조작하거나, 이러한 활동을 감지하기 위한 보호 기능을 무력화하려고 시도할 수 있습니다. 하지만 보안 검사를 추가하는 것은 단지 첫걸음에 불과합니다. 검사 자체를 보호해야 합니다. 

누가 근위병을 감시하는가? 

모바일 뱅킹 애플리케이션에서 코드 변조 여부를 확인하는 기능을 생각해 보세요. 변조가 감지되면 애플리케이션이 종료되거나, 추가 인증이 필요하거나, 중요도가 낮은 기능은 계속 사용하면서 고액 이체를 제한하는 등의 조치를 취할 수 있습니다. 이러한 조치들은 유용하지만, 또 다른 질문이 제기됩니다. 공격자가 무결성 검사 코드를 찾아내 변조하여 더 이상 작동하지 않도록 막을 방법은 무엇일까요? 

저항 없이 비활성화할 수 있는 보호 기능은 개발자에게 잘못된 안심감을 줄 수 있습니다. 애플리케이션에는 변조를 감지하는 코드가 포함되어 있지만, 코드를 변경할 수 있는 공격자는 감지 기능을 무력화할 수도 있습니다. 

위협 모니터링에도 동일한 문제가 적용됩니다. 시스템이 의심스러운 행동을 식별할 수는 있지만, 공격자가 식별 메커니즘을 방해하거나 탐지 결과를 무력화할 수 있다면 그 기능은 무용지물입니다. 이것이 바로 보안 분야에서 흔히 제기되는 질문, 즉 "누가 감시자를 감시하는가?"라는 문제의 핵심입니다. 

보안을 강화하는 것은 도움이 될 수 있지만, 이러한 보안 조치 자체가 설계 단계에 고려된 경우에만 효과적입니다. 그렇지 않으면 공격자는 보안 정책을 시행하는 메커니즘 자체를 표적으로 삼을 수 있습니다. 

경비 네트워크 구축 

Digital.aiArxan의 애플리케이션 보호 기술은 Guard라고 하는 보안 제어 시스템을 통해 이러한 문제를 해결합니다. Guard는 보호 대상 애플리케이션 바이너리에 삽입되어 애플리케이션 무결성을 검사하고, 애플리케이션에 대해 구성된 정책에 따라 감지된 변조에 대응할 수 있습니다. 사용 사례에 따라 애플리케이션 종료, 추가 인증 요구, 고액 금융 거래와 같은 민감한 기능 비활성화 등의 대응이 가능합니다. 중요한 아키텍처적 특징은 Guard 자체도 추가적인 Guard로 보호될 수 있다는 점입니다. 

이것이 우리가 라고 부르는 것을 만들어냅니다. 가드 네트워크가드는 공격자가 식별하고 표적으로 삼을 수 있는 고립된 검증 장치로만 존재할 필요가 없습니다. 다른 가드가 가드를 보호할 수 있으며, 이러한 보호 장치 자체도 추가적인 보호 계층을 받을 수 있습니다. 일부 구현에서는 가드가 다른 가드를 보호하는 방식으로, 보호 체계가 여러 계층으로 확장됩니다. 

이러한 계층 구조는 공격자가 직면하는 문제를 변화시킵니다. 특정 보안 검사를 비활성화하려면 해당 검사를 둘러싼 보호 장치 또한 극복해야 할 수 있습니다. 보호 아키텍처의 한 부분을 방해하려는 시도는 그러한 방해를 탐지하거나 저항하도록 설계된 다른 부분에 부딪힐 수 있습니다. 그 설계는 아이디어가 처음 제시되었을 때보다 지금 훨씬 더 중요해졌습니다. AI 도구 덕분에 대규모 애플리케이션 역설계에 필요한 비용과 기술 수준이 낮아졌으며, 자동화된 분석은 단일 취약점 검사와 같은 사소한 문제도 신속하게 찾아내고 수정할 수 있습니다.  

가드들이 서로를 보호하도록 구성된 경우, 하나를 제거하면 다른 가드들도 작동을 멈추도록 설계되었습니다. 대상에 따라 팀은 여러 설정을 통해 보호 기능을 다양하게 조정할 수 있습니다. 예를 들어, 각 보호 대상 빌드의 구조를 다르게 만드는 시드 값, 보호 시점에 가드 인스턴스를 무작위로 선택하는 기능, 그리고 모든 가드가 모든 실행에서 실행되지 않도록 하는 실행 확률 설정 등이 있습니다. 일부 가드는 런타임에 자체 동작을 변경하므로 정적 시그니처를 제공하지 않습니다. 예를 들어, 증분 체크섬은 자동화된 분석이 학습하고 우회할 수 있는 고정된 검사를 반복하는 대신 호출될 때마다 다른 범위를 검증할 수 있습니다. 한 릴리스 또는 한 번의 실행에 효과가 있었던 스트리핑 루틴이 다음 릴리스 또는 실행에도 효과가 있다는 보장은 없습니다. 

가드 네트워크는 애플리케이션이 침해 불가능해진다는 주장이 아닙니다. 어떤 단일 아키텍처도 모든 공격자, 플랫폼 또는 위협에 대해 완벽한 보안을 보장할 수는 없습니다. 가드 네트워크의 목적은 보호 기능을 찾아내고, 변경하고, 무력화하기 어렵게 만드는 데 있으며, 여기에는 보호 기능 자체에 대한 공격까지 고려하는 것이 포함됩니다. 이 차이점은 중요합니다. 공격자는 항상 전체 보안 아키텍처를 무너뜨릴 필요는 없습니다. 때로는 자신의 활동을 노출시킬 수 있는 단 하나의 메커니즘만 비활성화하면 됩니다. 가드를 보호함으로써 공격자의 접근 난이도를 높일 수 있습니다.  

탐지에는 대응으로 이어지는 경로가 필요합니다. 

무결성 검사를 보호하는 것은 문제의 일부일 뿐입니다. 보안 팀은 애플리케이션이 의심스러운 상황에 직면했을 때 어떤 일이 발생하는지에 대한 가시성도 확보해야 합니다. 

Arxan 위협 모니터링은 보호 대상 애플리케이션 내에서 작동합니다. 모니터링 제어 기능은 바이너리에 삽입되며, 경고는 웹 브라우저를 통해 확인하거나 보안 정보 및 이벤트 관리(SIEM) 시스템에 통합할 수 있습니다. 이를 통해 조직은 애플리케이션 수준의 보안 이벤트를 검토하고 이를 전반적인 보안 운영에 통합할 수 있습니다. 여기서 아키텍처 또한 중요합니다. 모니터링은 애플리케이션 내부에서 작동하므로 완전히 외부 관찰자로 간주해서는 안 됩니다. 모니터링 제어 기능은 보호 대상 바이너리의 일부이며, 보호 아키텍처는 애플리케이션 및 보안 메커니즘에 대한 변조 시도를 방지하도록 설계되었습니다. 

가드 네트워크는 제어 자체를 보호함으로써 이러한 보안의 핵심적인 부분을 담당합니다. 외부 알림 및 SIEM 통합을 통해 보고된 이벤트를 애플리케이션 외부에서도 활용할 수 있습니다. 이러한 메커니즘은 각각 다른 목적을 수행합니다. 가드는 애플리케이션의 무결성을 보호하고 감지된 변조 시도에 대한 대응을 촉발할 수 있습니다. 위협 모니터링은 보안 관련 활동을 파악하는 데 도움이 됩니다. 외부 보고는 보안 팀이 이벤트를 조사하고 대응을 조율하는 데 유용합니다. 

각 부분에는 한계가 있습니다. 보고 채널은 감지되지 않은 이벤트를 보고할 수 없으며, 어떤 보호 조치도 모든 공격에 완벽하게 대비할 수 있다고 가정해서는 안 됩니다. 목표는 공격자가 애플리케이션을 침해하기 어렵게 만들고, 침해 사실을 드러내거나 제한하도록 설계된 메커니즘을 무력화하는 것입니다. 

대응은 위협에 부합해야 합니다. 

보안 제어는 흔히 무엇을 탐지하는지에 초점을 맞춰 논의되지만, 실제로는 그 다음에 어떤 조치가 취해지는지가 중요할 수 있습니다. 예를 들어, 은행 애플리케이션은 의심스러운 상황을 감지한 후 추가 인증을 요구할 수 있습니다. 또한, 일반적인 거래는 허용하면서 고액 이체는 제한할 수도 있습니다. 더욱 엄격한 무결성 요구 사항을 가진 애플리케이션은 코드가 수정된 경우 종료될 수 있습니다. 이러한 대응은 위험에 대한 다양한 평가를 반영합니다. 개발자는 애플리케이션, 위협의 종류, 그리고 실행을 계속 허용했을 때 발생할 수 있는 잠재적 결과를 고려하여 적절한 대응 방식을 선택할 수 있습니다. 

저희 게임 고객 중 한 곳은 좀 더 재미있는 접근 방식을 택했습니다. 해당 팀은 플레이어의 부정행위를 감지하는 보호 시스템을 개발했습니다. 이 시스템이 작동하면 게임의 중력 기능을 끄도록 설계했습니다. 그러면 부정행위를 한 플레이어의 캐릭터는 게임 화면 밖으로 둥둥 떠다니게 됩니다. 기억에 남는 사례이지만, 그 이면에는 중요한 아이디어가 담겨 있습니다. 이 보호 시스템은 공격이 발생한 환경에서 실질적인 결과를 가져오도록 설계되었습니다. 개발자는 부정행위 감지를 단순히 과정의 끝으로 여기지 않고, 이를 통해 게임에서 허용하는 기능을 변경하는 데 활용했습니다. 

금전적 손실, 민감한 데이터 유출 또는 핵심 기능 접근 권한 침해와 같은 결과가 발생할 경우에도 동일한 원칙이 적용됩니다. 대응책은 위험 수준에 적합해야 하며, 공격자가 대응 메커니즘을 무력화하기 어려워야 합니다. 개발자는 또한 오탐, 복구 경로 및 정상 사용자에게 미치는 영향도 고려해야 합니다. 보안은 불필요한 서비스 중단을 초래하지 않으면서 애플리케이션의 복원력을 향상시켜야 합니다. 

경비대원들이 표적이 되면 무슨 일이 벌어지는지 물어보세요. 

OpenAI 보고서는 모니터링이 감시 대상 시스템의 변경으로 인해 무력화될 수 있음을 다시 한번 상기시켜 줍니다. 애플리케이션 개발자는 공격자가 실행 과정을 검사하고 조작할 수 있는 환경에서 소프트웨어가 실행될 때 이와 유사한 문제에 직면합니다. 문제는 애플리케이션에 무결성 검사나 위협 모니터링 기능이 있는지 여부를 넘어, 이러한 메커니즘이 어떻게 보호되는지, 간섭에 어떻게 대응하는지, 그리고 공격자가 공격을 노출시킬 수 있는 제어 기능을 어떻게 무력화할 수 있는지까지 확장됩니다. 

바로 이 부분에서 가드 네트워크가 중요합니다. Arxan은 가드를 사용하여 다른 가드를 보호함으로써 보안 메커니즘 자체에 추가적인 보호 계층을 더합니다. 이는 애플리케이션 방어를 변경하거나 개별 제어를 무력화하려는 공격자에게 추가적인 장애물을 제공합니다. 애플리케이션 보안 아키텍처를 평가할 때는 다음 세 가지 질문을 고려해야 합니다.

1) 공격자가 보안 시스템 자체를 공격 대상으로 삼으면 어떻게 되나요?
2) 단 한 번의 수정으로 핵심 보안 메커니즘이 비활성화되는 것을 막는 것은 무엇입니까?
3) 보안 시스템이 변조를 감지했을 때 애플리케이션은 어떤 옵션을 사용할 수 있습니까? 

목표는 애플리케이션이 절대 손상되지 않도록 보장하는 것이 아닙니다. 목표는 변조를 더욱 어렵게 만들고, 공격 시에도 의미 있는 보안을 유지하며, 애플리케이션의 무결성이 의심될 때 개발자가 실질적으로 대응할 수 있는 방법을 제공하는 것입니다. 때로는 금융 거래를 제한하는 것이, 때로는 애플리케이션을 종료하는 것이 그 대응책이 될 수 있습니다. 

그리고 때로는 중력을 차단하고 부정행위를 한 사람의 선수들이 공중에 떠다니는 것을 지켜보는 것을 의미하기도 합니다. 

당신은 또한 좋아할 거라