제공 :
한빛 네트워크
저자 : George Reese
역자 : 정지용
원문 :
The Myth of the Private API
일주일 좀 더 전, 저는
공개되지 않은 테슬라 REST API의 인증모델이 어떻게 설계부터 잘못되었는지 쓴 적이 있습니다. 자격 증명을 제 3자에게 공유하는 것에 대한 기본적인 예방책이 없었기 때문입니다. 이런 모델은 오늘날 대부분의 REST 기반 서비스에서 쓰이는 데도 말입니다. 글이 발행되자, 글에 대한 대부분의 비판은 이 API가 공개된 것도 아니고, 제 3자의 서비스를 통해 사용하라고 알려지지 않았다는 점에 대한 것이었습니다.
장치나 서비스에 가치를 더하는 것은, 이를 만든 사람에게 미리 알리거나 허락을 구했는지 여부에 상관없이 사물 인터넷(Internet of Things)의 핵심적인 부분입니다. 오늘날 사람들은 자신의 장치들을 다루는 API를 기대합니다. 사람들은 어떤 API든 발견해내고 장치나 서비스에 가치를 더할 것입니다. 이를 위해 약간의 역공학(reverse engineering)이 필요하더라도 말이지요. 사물 인터넷으로 정의되는 오늘날의 세계에서 장치나 서비스의 책임감 있는 제작자라면 다음과 같은 작업을 해야 합니다. 항상.
- 공개 API를 만드세요.
- 내부 통신은 역공학이 불가능하도록 보호하세요.
- 최종 사용자가 제 3자의 장치나 서비스를 함께 활용할 때 위험에 처하지 않도록 공개적인 통신을 보호하세요.
API가 공개 되었는가 안 되었는가라는 관점은 기술을 사용하는 방식이 서서히 진화해온 것을 고려하지 않고 있습니다. 직장이나 집에서 사용하는 많은 장치들을 다시 생각해보자면, 이 장치들 그 하나만 사용할 때 뿐 아니라, 이 장치들을 함께 어떻게 사용할지 다시 생각해보아야합니다. 그것이 전화기이든, 차든, 전구든 기술을 소비하는 입장에서는 이 장치들이 안전하게 상호작용할 수 있어야한다고 요구해야합니다.
보안의 부담
테슬라 API에서 제가 파헤친 문제는 테슬라가 자격 증명을 관리하는 부담을 모두 최종 사용자에게 지웠기 때문에 발생한 것입니다. 다른 말로, 테슬라 API는 최종 사용자들이 그들의 차와 상호작용하기 위해 제 3자의 서비스를 어떤 상황에서든 절대 활용하지 않는다는 전제 위에서만 온전합니다. 테슬라는 제 3자 서비스의 불법 행위나 과실에 대비하여 공개되지 않은 API를 안전하게 만들 의무는 없습니다.
일반적인 원칙으로, 저는 사용자가 유용한 기능을 활용하는 것과 안전한 것 중 하나를 선택하도록 강제하는 소프트웨어 구조 접근 방법을 좋아하지 않습니다. 특히 쉽게 둘 다를 얻을 수 있을 때는요. 만약 보안의 부담을 API가 아니라 사용자에게 준다면, 사용자의 올바른 반응은 안전한 사용을 위해 제 3자의 모든 가치를 높이는 기능들을 포기하는 것일 겁니다. 제 경험을 돌이켜보자면, 편의성 대 보안의 싸움에서는 언제나 편의성이 이깁니다. 그리고 사용자가 변하리라 기대하는 것은 어리석은 일이지요.
이 문제에 대한 저의 시각을 입증하는 세 가지 현상:
- 클라우드 컴퓨팅. 최종 사용자는 더 민첩해지기 위해 여러 가지를 "클라우드 속에" 넣고 있는 반면, 중앙 IT 담당자는 "규칙을 어긴다."고 잔소리 합니다.
- BYOD(Bring Your Own Device, 자신의 장비를 직장 등으로 가져와서 사용하는 것). 최종 사용자는 회사 IT 담당자가 검증한 것보다 더 다양한 장비들을 활용하여 IT 담당자가 생각할 수 없는 일들을 가능하게 합니다.
- "사물 인터넷." 모든 서비스와 장치들이 이를 설계한 사람들의 의도를 훌쩍 넘어서는 풍부한 API와 기능들로 상호 연결됩니다.
장치나 서비스 제작자의 의도를 넘어서는 사용자가 없다면, 이 모든 것이 불가능했을 것입니다. 뿐만 아니라 온라인 뱅킹 같이 오늘날 해도 된다고 여겨지는 것들 중 대부분조차 불가능했을 것입니다.
클라우드 컴퓨팅은 클라우드 제공자가 사용자에게 도구들을 주고 클라우드 안에서 안전하게 작업할 수 있도록 허락할 때 가장 안전합니다. 사용자가 클라우드에 들어가지 못하게 막는 것은 해결책이 아닙니다. BYOD도 마찬가지입니다. 회사 네트워크에서 사람들이 자기 장비를 사용하지 못하게 막으려고 할 수는 있습니다. 하지만 그 결과는 사람들이 회사 네트워크를 쓰지 않게 될 뿐입니다. 보안을 향상시키지도 못하고, 사람들이 업무에 자신들의 장비를 쓰는 것을 막지도 못하지요.
그러나 테슬라 모델 S에 있어서는 "사물 인터넷"의 관점에서 보아야 할 것입니다. 모든 장치와 모든 서비스가 사람의 개입 없이, 있더라도 최소한으로 하며 서로 통신하는 세상 말입니다.
상호 연결된 세상 이야기
사물 인터넷의 본질적인 측면 중 하나는 제조사가 자신의 장치나 서비스에 대하여 올바른 "사용 예"를 정하지 않게 된다는 것입니다. 사실 상호 연결된 세상의 핵심은 장치를 개발한 사람의 상상력을 훌쩍 뛰어넘는 가치를 창조하는 것입니다. 예를 들어 제 차와 알람시계, 날씨, 전구, 제 집의 보안 시스템이 서로 대화하여 제가 집에서 나갈 수 있게 해주는 세상을 테슬라는 꿈꿔보았을 수도, 아니었을 수도 있습니다. 저는 꿈꿔왔고, 수많은 다른 사람들도 그랬을 것입니다.
당신 자신만의 사물 인터넷을 만들어 보려면 그저 몇 가지 최신 장치와 약간의 프로그래밍 노하우만 있으면 됩니다. 복잡한 배선이나 주문 제작해야하는 하드웨어는 필요 없습니다.
필요한 요소들입니다:
- 필립스 휴 전구와 같이 API가 있는 전구
- 라스베리 파이나 더 일반적인 노트북 혹은 데스크톱 혹은 서버
- 테슬라 모델 S와 같이 API가 있는 차
- API가 있고 프로그래밍 할 수 있는 온도 조절 장치
- 인터넷 연결
- 태블릿
이것들의 핵심 특징은 모두 인터넷에 연결할 수 있고 API가 있다는 것입니다. 라스베리 파이에서 직접 프로그래밍 하는 부분만 빼면, 각 요소들은 함께 동작하는 다른 요소들에 대하여 아무 것도 모릅니다.
각 요소들은 특별히 어떤 특수 용도의 연결망으로 연결되어있지 않습니다. 이들 중 아무것도 다른 요소들을 고려하여 만들어지지 않았습니다. 그저 RESTful API와 약간의 프로그래밍으로 본질적으로 상호 연결되어있을 뿐입니다.
비공개 API라는 신화
아마 보안을 어디에서 책임지느냐는 질문의 근원을 쭉 쫓아 들어가 보면, 테슬라가 사물 인터넷을 고려했었어야 했느냐는 질문으로 귀결될 것입니다. 당신이 일어날 때 당신의 집이 알아서 차를 준비 시킨다면 멋지기는 하겠지만, 테슬라가 원했던 시나리오는 아닐 수 있습니다. 우리 모두가 알고 있듯, 테슬라는 API를 공개하지 않았고, 이런 상호 연결된 세상을 지원하도록 API를 설계하지 않았습니다.
하지만 최신 장치나 클라우드 서비스에 있어서 비공개 API 같은 것은 없습니다. 더 중요한 것은 테슬라가 API를 진정한 비공개 API로 만드는 가장 기본적인 예방책도 취하지 않았고, 제 3자 응용 프로그램에서 API를 사용할 때 사용자를 보호하는 가장 기본적인 예방책도 취하지 않았다는 것입니다. 공개하지도 않았고, 완전한 비공개도 아니며, 안전하지도 않은, 한마디로 최악입니다.
저는 궁극적으로 공중 인터넷을 통해 사용되는 비공개 API 같은 것은 없다고 진심으로 믿습니다. 분명 응용 프로그램의 구성요소들이 서로 비공개로 통신할 수 있도록 하는 종류의 API가 있긴 합니다. 제가 창업한 Enstratius로부터 인수한
Dell MCM 소프트웨어는 공개
RESTful API와 몇 가지 내부 SOAP API를 모두 가지고 있습니다. 저희는 내부 API는 공개하지도 않고 그에 대해 많이 이야기하지도 않습니다. 하지만 여기서 중요한 점은 고객이 공개된 REST API로 필요한 모든 일을 할 수 있고, 또한 고객이 내부 API를 역공학으로 파헤치거나 활용할 수 없도록 저희도 필요한 조치들을 했다는 것입니다.
테슬라는 모바일 앱과 차와의 통신에 API를 사용합니다. 하지만 이를 제 3자가 사용하지 못하도록 보호하는 기본적인 조치들을 하지도 않았고, 비공개 방식으로 단단히 결합시켜놓지도 않았습니다. 그 결과 사람들이 API를 역공학으로 분석한 후, 거기에 가치를 더하는 서비스들을 창조하기 시작했습니다. 이것은 당신의 자격 증명을 훔쳐가려는 해킹 프로그램이 아닙니다. 테슬라의 승인이 없어도 될 진짜 가치 있는 서비스들입니다. 저 역시도 이들 중 몇 가지를 써 보았습니다.
필립스 휴(Hue)도 비슷한 일들을 겪었습니다. 제가 마지막으로 확인해보았을 때도 API는 "공개되지 않았습니다." 그렇다고 해서 제가 휴 전구와 호환되는 일반적인 전구 관리 API를 쓰지 않을 수는 없었습니다. 이 API를 바탕으로 한 풍요로운 생태계가 생겨나는 것도 명백히 막지 못했고요. 외부의 연구자가 휴 API의 보안 모델을 비판하는 것 또한 막지 못했습니다. 즉, API를 공개하지 않았다고 해서 API가 비공개 API가 되는 것은 아닙니다. 인터넷을 통해서 사용되고, 역공학이 가능한 포맷인 한, 사람들은 역공학으로 분석하고, 가치를 더할 것입니다.
제가 원 글에서 놓친 것이 하나 있는데, 테슬라가 이런 API를 만든 것을 제가 칭찬한다는 것입니다. 사실 트위터나 다른 곳에서 토론하면서, 테슬라에 문제가 있는 API라도 있는 것이 아예 API가 없는 것보다 낫다고 언급한 바 있습니다. 하지만 이 글의 초점은, 상호 연결된 세상에서 사용자가 제 3자의 장치나 서비스를 활용할 수 있도록 해주는 API를 보호 장치 없이 만드는 것은 무책임하다는 것입니다. 특히 REST API 보안에 관한 흔히 쓰이는 모범 사례(OAuth와 요청 서명)를 적용하면, 많은 프로그래밍 작업 없이 문제를 쉽게 해결할 수 있다는 점을 생각하면 특히 더 무책임합니다.