GraphQLer: Enhancing GraphQL Security with Context-Aware API Testing
GraphQLer는 라이브 스키마로부터 타입이 지정된 의존성 그래프를 구축하여 다단계 취약점 체인을 합성함으로써 GraphQL API 보안을 강화하는 오픈 소스 자동화 보안 테스트 프레임워크이며, 이를 통해 IDOR, UAF 및 인젝션 취약점과 같은 복잡하고 상태 의존적인 결함을 탐지하는 데 있어 ZAP 및 EvoMaster와 같은 기존 도구보다 뛰어난 성능을 발휘합니다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
인터넷을 서로 정보를 주고받는 다양한 컴퓨터 프로그램(앱)들이 끊임없이 대화하는 거대하고 북적이는 도시라고 상상해 보세요. 수년 동안 이러한 대화는 엄격하고 예측 가능한 지도를 따랐습니다. 예를 들어, 사진을 원하면 "사진" 폴더를 요청하고, 메시지를 원하면 "메시지" 폴더를 요청하는 식이었죠. 이는 모든 요리의 이름과 위치가 고정되어 있는 메뉴판에서 주문하는 것과 같았습니다. 하지만 최근에 GraphQL이라는 새로운 대화 방식이 인기를 얻었습니다. GraphQL은 고정된 메뉴 대신, 마법처럼 형태를 바꾸는 자판기와 같습니다. 당신이 원하는 것을 정확히 요청하면, 그것은 즉석에서 당신을 위해 그것을 만들어내려고 노력합니다. 문제는 이 기계가 매우 유연하기 때문에, 가끔 자기 앞에 누가 서 있는지 확인하는 것을 잊는다는 점입니다. 일반적인 자판기는 동전을 가진 사람에게만 탄산음료를 주겠지만, 이 마법 같은 자판기는 당신이 적절한 방식으로 요청하기만 한다면 실수로 개인 일기장이나 은행 계좌를 건네줄 수도 있습니다. 여기서 보안 연구원들이 등장합니다. 그들은 도시 자체를 무너뜨리지 않으면서도, 어떻게 하면 이 기계를 속여 비밀을 밝혀낼 수 있을지 알아내려 노력합니다.
여러분이 읽게 될 논문은 GraphQLer라는 새로운 디지털 탐정을 소개합니다. 대부분의 보안 스캐너는 자판기에 다가가서 무작위로 버튼 하나를 누르고 무슨 일이 일어나는지 지켜보는 서투른 관광객과 같습니다. 만약 "탄산음료"를 눌러서 탄산음료를 얻었다면, 그들은 그냥 지나갑니다. 만약 "물"을 눌렀는데 에러가 발생하면, 그들은 포기합니다. 그들은 복잡한 순서를 거쳐야 "비밀 창고"에 도달할 수 있다는 사실을 결코 깨닫지 못합니다. 즉, "탄산음료 구매"를 누른 다음, "영수증 받기"를 누르고, 그다음에 "비밀 창고"를 눌러야 한다는 것을 말이죠. 기존의 도구들은 너무 멍청해서 이 점들을 연결하지 못합니다. 그들은 모든 버튼을 개별적으로 테스트할 뿐이며, 시스템을 깨뜨리기 위해 필요한 복잡한 시퀀스를 놓칩니다.
GraphQLer는 다릅니다. 그것은 먼저 기계의 설계도("스키마")를 공부하여 버튼들이 어떻게 연결되어 있는지 이해하는 탐정과 같습니다. 이 탐정은 "버튼 A"가 새로운 항목을 생성하고, "버튼 B"는 그것을 삭제하며, "버튼 C"는 삭제된 후에도 여전히 그것을 볼 수 있을지도 모른다는 정신적 지도를 구축합니다. 이 지도를 가지고 GraphQLer는 단순히 무작위로 버튼을 누르는 것이 아니라, 특정 체인(chains) 동작을 만들어냅니다. 사용자가 아이템을 구매한 다음, 그것을 훔치려 시도하거나, 삭제한 다음 그것을 다시 읽으려고 시도하는 시나리오를 시뮬레이션합니다.
연구진은 이 새로운 탐정을 21개의 서로 다른 실제 및 가상의 API(테스트 대상인 컴퓨터 시스템)에서 테스트했습니다. 그 결과, GraphQLer가 기존의 도구들보다 엄청난 개선을 이루었음을 발견했습니다. 최고의 기존 도구들이 기계의 버튼 중 약 29%에만 도달할 수 있었던 반면, GraphQLer는 **85.52%**에 도달했습니다. 더 중요한 것은, 복잡한 단계별 보안 문제를 찾는 데 있어 기존 도구들은 단 하나도 찾아내지 못했다는 점입니다. 그러나 GraphQLer는 확인된 5가지의 모든 "IDOR" 취약점(숫자 하나만 바꿔도 다른 사람의 물건을 볼 수 있는 취약점)을 찾아냈으며, 심지어 "Use-After-Free" 버그(파일을 삭제한 후에도 볼 수 있는 버그)까지 잡아냈습니다.
실제 금융 시스템(저자들은 익명성을 위해 이를 "FinServ"라고 부릅니다)에서의 테스트에서, GraphQLer는 비밀번호나 비밀 문서를 필요로 하지 않고도 8개의 잠재적인 보안 결함을 찾아냈습니다. 심지어 시스템을 충돌시켜 내부 코드를 드러내는 방법까지 찾아냈는데, 이는 보안상 매우 위험한 일입니다. 또한 논문은 GraphQLer가 이미 결함이 있는 것으로 알려진 유명 오픈 소스 플랫폼인 Saleor에서 알려진 취약점들을 재현할 수 있음을 보여줌으로써, 이것이 이미 망가진 시스템에서도 작동한다는 것을 증명했습니다.
저자들은 자신들의 도구가 이러한 특정 유형의 연쇄 반응 버그를 찾는 데는 탁월하지만, 모든 것을 해결하는 마법 지팡이는 아니라는 점을 매우 신중하게 언급하고 있습니다. 이 도구는 여전히 기계가 작동하기 위해 여러 조각의 정보를 동시에 요구하는 매우 구체적이고 복잡한 시나리오에서는 어려움을 겪습니다. 하지만 이 유연한 GraphQL 기술을 사용하는 대다수의 현대적인 앱들에 대해, GraphQLer는 더 이상 버튼을 하나씩 테스트하는 것만으로는 부족하다는 것을 증명합니다. 당신은 기계가 들려주는 이야기를 이해해야 하며, 그래야만 이야기의 허점을 찾아낼 수 있습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.