[도라이브 저자와의 대화] '직접 설계하고 개발하는 IoT 백신'의 이창우 저자
“책이 단 한 권도 없는데, 어디서 배우나요. 어떻게 개발해야 할지 모르겠어요.”
그 한마디에 펜을 들고 써내려갔던 책이 마침내 나왔다. 이창우 저자의 첫 책 <직접 설계하고 개발하는 IoT 백신>다. 내놓기만 하면 날개 달린듯 팔리는 ‘인공지능’이 아니라 속댓말로 돈이 안되 출판사마다 마다하는 보안, 그것도 ‘백신’으로 삼은 것은 후배의 이 말 한마디 때문이었다. 누구도 가지 않은 길을 택한 것은 그저 뒤따라올 이들을 위해서였다. 사물인터넷(IoT)과 백신을 엮은 것도 주류에 편승하겠단 얄팍한 속셈에서가 아니라, 최소한의 자원만 허용되는 IoT 장치가 백신 개발을 설명하기 가장 좋아서라고.
[toggle title="이창우" state="open"]
보안 기업 안랩(AhnLab)에서 10년 동안 PC용 V3 방화벽과 침입차단 시스템 엔진, 웹 보안 솔루션을 개발했다. 이후 삼성전자에서 SDL(Security Development Lifecycle) 적용하고 스마트TV 보안 강화와 임베디드 보안 프레임워크를 설계했다. 현재는 삼성 스마트TV 통합 보안 솔루션인 ‘스마트 시큐리티’를 담당하며 임베디드 백신, 코드 서명, 방화벽을 개발하고 있다.
하나의 보안 기술만으로 컴퓨터 시스템을 안전하게 만들 수 없다. 따라서 개발 기술뿐만 아니라 프로세스와 조직 문화까지 보안과 관련된 것이라면 무엇이든 공부하고 있다.[/toggle]
Q. IoT에서 보안이 왜 중요한거죠
IoT 시대는 PC뿐 아니라 작은 사물들조차도 인터넷에 연결되는 시대를 말합니다. 4차 산업혁명을 이야기할 때 빼놓을 수 없는 주제죠. 그런데 우리는 이미 IoT 시대를 살고 있습니다. 지하철 버스 요금 단말기, 편의점 PoS 시스템, ATM 기기, 도서관 대출 시스템 등 주위를 둘러보면 이미 많은 기기가 인터넷에 연결되어 있습니다. 불과 몇 일 전에도 랜섬웨어가 사회적 이슈였죠. 뉴스에서 PC를 네트워크에서 분리하는 이야기를 들었을 겁니다. PC 조차도 인터넷 연결로 인해 보안사고가 일어나는데, 대부분 사물이 인터넷에 연결된다면 보안 사고의 피해 규모는 우리의 상상을 초월할 것입니다. 결국 IoT 시대에는 보안이 중요할 수밖에 없습니다.
Q. 이미 시장에 유명한 백신을 IoT에 적용하면 안 되나요?
PC 버전의 백신을 그대로 탑재하면 두 가지 문제가 발생합니다. IoT 장치는 하드웨어 성능이 낮아 상용 백신과 같이 기능이 많은 백신을 그대로 탑재하기는 어렵습니다. 또한 IoT 장치는 플랫폼이 다양하지만, 상용 보안 솔루션이 동작하는 플랫폼은 한정적입니다. 따라서 상용 보안 솔루션을 IoT 장치에 넣을려면 많은 비용이 듭니다. 결국 성능과 비용을 생각하면 IoT 장치에 꼭 맞는 보안 기능을 직접 개발할 수밖에 없습니다. 이때 백신의 기본 구조는 IoT 보안 솔루션 개발에 좋은 참고자료가 될 것입니다.
백신의 기본 구조는 이렇습니다. 중앙 서버에서 규칙을 배포하고 장치에서는 그 규칙을 수신하고 장치의 행위를 감시하다가 규칙에 위반되는 것이 있으면 차단하는 구조입니다. 그런데 이런 백신의 기본 구조는 다른 대부분의 보안 솔루션에도 응용되었습니다. 방화벽, 침입차단시스템, MDM 들도 모두 같은 구조를 가지고 있죠. 한마디로 IoT 보안 솔루션을 기획하거나 설계할 때 백신의 전체 구조는 좋은 참고자료이자 시발점인 것입니다.
Q. IoT 백신은 PC용 백신과 무엇이 다른가요?
성능과 비용 차이도 있지만 결정적 차이는 바로 사용자 관점입니다. 사용자 입장에서 PC와 IoT를 살펴보죠. PC에는 모니터와 스피커, 키보드, 마우스와 같은 입출력 장치가 있습니다. 이런 PC에서 바이러스를 발견하면 사용자에게 바이러스를 경고하고 자세한 정보를 보여줍니다. 그것을 삭제할지 무시할지 묻죠.
IoT의 경우는 어떨까요? 혹시 아마존에서 만든 대시버튼을 아시나요? 세탁기 옆에 붙여두고 세제가 떨어지면 버튼만 누르면 세제가 배송되는 작은 IoT 장치입니다. 이처럼 대부분 IoT 입출력 장치는 열악합니다. 적은 수의 버튼이나 스피커, LED 정도가 달렸을 뿐입니다. 이런 장치에서 사용자와 교감하는 UI를 구성해야 하는데요. 이런 걸 Zero UI라고 말합니다.
IoT 보안 솔루션도 이러한 Zero UI에 맞게 설계돼야 합니다. 예를 들어 바이러스를 발견했다면 어떻게 해야 할까요? 마우스 같은 입력장치가 없으니 사용자가 차단을 선택하도록 유도할 수 없습니다. 그래서 IoT 백신은 사용자 선택이 필요없는 완벽하고 정교한 차단 기준을 가져야 합니다. 또한 사용자가 IoT 앞에 상주하는 것이 아니기 때문에 나중에 차단 여부를 확인하고 싶어도 LED만 있는 경우에는 그것조차 어렵습니다. 따라서 차단 결과를 수집하고 관리하는 백엔드 인프라 시스템도 IoT 백신에는 반드시 필요합니다.
Q. <직접 설계하고 개발하는 IoT 백신>을 집필하게 된 동기는 무엇입니까?
백신 개발은 꽤 어려워 보입니다. 더군다가 IoT용 백신이라고 하니 더 어려워 보일 수밖에요. IoT 보안은 개발자들이 직접 개발할 수밖에 없습니다. 그런데 신입사원들에게 물어보면 보안 솔루션 개발에 참고할 만한 책이 없다고 합니다. 대부분의 보안 서적들이 해킹이나 암호화에 대해서만 다루다보니 보안 솔루션 개발에 참고할 만한 책이 없다는 겁니다. 백신의 기본 구조가 보안 솔루션의 기초가 되기 때문에 이러한 책이 한 권쯤은 있어야 할 것 같았습니다.
Q. 책을 소개해 주세요.
대부분의 기술서들이 이미 작성된 코드를 설명하는 식으로 구성되어 있습니다. 같은 목적을 가지는 코드도 작성자마다 다를 수밖에 없기 때문에 독자 입장에서는 어려울 수밖에 없습니다. 그래서 제가 생각한 해결책은 백신 개발 과정을 스토리를 구성하는 것이었습니다. 이 책은 한 대학생이 소프트웨어 공모전에 IoT 백신을 출품하기 위해 개발하는 과정을 그리고 있습니다. 독자는 책을 읽으면서 요구사항을 분석하고 이걸 토대로 설계도 해보고 설계서를 바탕으로 코드를 작성하며 자연스럽게 백신의 기본 구조를 익히고 어느덧 자신만의 백신을 만들게 됩니다.
다른 사람이 어렵다고 생각하는 걸 자신이 할 수 있다면 그 만큼 자신의 가치가 높아지는 거 아닐까요? 독자에게 보안 솔루션 개발자로서의 꿈과 희망을 드리고자 이 책을 썼습니다.
Q. 독자는 누구입니까?
이 책에 등장하는 대학생 정도의 실력이면 충분합니다. 조금 더 넓게 보면, 고등학생부터 사회 초년생까지를 독자 층으로 생각하고 있습니다. C 언어로 간단한 네트워크 프로그래밍을 해봤고, 리눅스를 다뤄봤으며 UML이 무엇인지 알고 있는 사람이라면 이 책을 충분히 읽을 수 있습니다.
Q. 어떤점에 주안점을 두고 집필하셨나요
이 책의 주제는 실용적인 소프트웨어 설계 방법론입니다. 그래서 제목에 ‘직접 설계하고 개발하는’ 이라는 수식어를 붙였습니다. 이 책은 가상의 대학생을 중심으로 한 스토리로 구성돼 있는데요. 이 책의 주인공은 한번도 백신을 개발해보지 않은 인물입니다. 이 주인공이 백신 요구사항만 주어져 있는 상태에서 자신이 백신을 직접 설계하고 개발할 수 있는 이유는 바로 이 책의 특징인 UML 실용 설계 덕분입니다.
Q. UML 실용 설계가 무엇인지 조금 더 자세히 설명해주세요
그런 이야기 들어보셨나요? 요구사항, 설계서, 코드 따로 논다는… 대부분 개발자들이 요구사항이 아닌 경험을 바탕으로 설계를 하고 있습니다. 예를 들어서 명함 정보를 파일로 저장해달라는 요구사항을 받았습니다. 그럼 개발자는 설계하면서 파일 클래스를 일단 작성하고 시작합니다. 그 클래스에 save라는 메서드를 추가하겠죠. 그 다음에는 명함 클래스를 추가합니다. 그리고 이 두 개를 어떻게 연관시킬지, 어떤 디자인 패턴을 적용할지 고민합니다. 시간이 지날수록 설계는 복잡해지고 설계대로 만들어진 코드는 요구사항과는 상관없는 코드가 만들어집니다.
이렇게 비대해진 코드의 사용성을 보면 20%도 사용되지 않습니다. 코드가 비대하다는 것은 그만큼 성능에도 문제가 있다는 것이고, 유지보수 비용도 많이 들고 심지어 보안 취약점도 많을 수밖에 없습니다.
결국 요구사항을 만족하면서도 간결한 코드를 작성해야 합니다. 다시 말해 소프트웨어 개발은 요구사항에서 시작해서 요구사항으로 끝나야 합니다. 흔히 설계서를 유지보수하기 위한 문서라고 생각하는데요. 설계서는 요구사항과 코드 사이의 연결고리입니다. 예를들어 어떤 함수를 설계했다면 왜 그런 함수를 도출했는지, 그 근거를 표현해야 합니다. 그 방법이 바로 UML 실용 설계입니다.
UML 실용 설계는 제가 15년 동안 개발자로 활동하면서 만든 설계 방법인데요. 소비자가 원하는 요구사항을 분석하고 분석된 걸 다시 동적 관점에서 정적 관점에서 공통점을 추출해서 함수를 만들고 이렇게 도출된 함수들을 보안성과 관리 효율 기준에 의해 컴포넌트로 모으고 이 내용을 그대로 코드로 구현하면 됩니다. 결국 요구사항부터 컴포넌트까지 연결된 하나의 다이어그램을 만들 수 있게 됩니다. 저는 이걸 UML 전체 흐름도라고 부릅니다(http://www.schoolime.com/securityschool/download/ko-iot-antivirus-c2-requirement-uml-total-flow/). 이렇게 하면 요구사항과 상관없는 함수들이 존재하지 않기 때문에 최소한의 코드로 모든 요구사항을 만족할 수 있습니다. 코드가 간결하기 때문에 성능은 좋고 버그도 적으며 유지보수 비용도 적게 들고 보안 취약점도 적게 됩니다.
정리하면 UML 실용 설계는 요구사항을 분석해서 필요한 요소들을 도출합니다. 따라서 백신 경험이 없는 주인공도 백신 요구사항만으로 자신이 직접 설계하고 백신을 개발할 수 있었습니다. 백신뿐 아니라 처음 경험하는 소프트웨어를 개발할 때도 UML 실용 설계를 사용할 수 있습니다.[테크수다 Techsuda]