[보안뉴스= 차상길 KAIST 사이버보안연구센터 센터장] 컴퓨터의 활용에는 프로그래밍이 필수적입니다. 컴퓨터가 인류와 역사를 함께한 이후부터 프로그래밍의 중요성은 날로 커져만 가는데요, 이러한 프로그래밍을 사람이 아닌 컴퓨터가 할 수 있을까요?
[이미지=utoimage]
사실, 이에 관한 질문은 이미 60여 년 전부터 시작됐으며, 최근에는 프로그램 합성(Program Synthesis)이라는 분야를 통해 급성장했습니다. 해마다 열리는 세계 최대의 소프트웨어공학 학회인 ICSE에서는 최근 10년간 소프트웨어공학 분야에서 가장 영향력 있었던 논문을 뽑아 ‘Most Influential Paper Award’라는 상을 주는데, 올해에는 프로그램 합성에 관한 논문이 그 영예를 차지하기도 했죠.
프로그램 합성이란 말 그대로 사람이 원하는 프로그램을 자동으로 만들어내는 기술을 일컫습니다. 예를 들어 입력으로 주어진 숫자 배열을 정렬하는 프로그램을 만들고 싶다고 가정해봅시다. 일반적으로는 사람이 직접 타자를 입력해 소스 코드(여기서는 정렬 알고리즘)를 작성하게 되지만, 프로그램 합성을 활용하면 원하는 프로그램의 명세나 사용례를 기반으로 컴퓨터가 자동으로 해당 소스 코드를 ‘구현’하게 됩니다.
프로그램 합성 방법 중 최근 들어 많은 주목을 받는 것이 프로그램의 사용례를 바탕으로 한 기술입니다. 앞서 말한 예제를 기준으로 본다면, 프로그램의 입력인 숫자 배열과 그에 해당하는 출력 값인 숫자 배열의 입출력 쌍이 하나의 사용례가 되는 것이죠. 이러한 입출력의 예시를 여러 개 만들고, 그러한 예시를 모두 만족시키는 프로그램을 합성해내는 기술이 바로 최근 10년간 소프트웨어공학 커뮤니티에서 가장 영향력 있던 기술이었습니다.
그런데 재미있는 점은 사용례 기반의 프로그램 합성은 우리가 흔히 알고 있는 기계학습과 그 동작 방식이 매우 유사하다는 것입니다. 기계학습에서는 다양한 학습데이터로부터 하나의 모델을 생성해 내는데, 모델은 그야말로 하나의 프로그램에 불과합니다. 학습데이터와 유사한 입력을 받으면 그에 대한 출력값을 반환하죠. 즉, 기계학습은 모델이라는 프로그램을 만들어내는 기술입니다. 앞서 소개한 프로그램 합성 역시, 사용례라 불리는 학습데이터로부터 하나의 모델을 생성해내는 과정입니다. 다만, 그 모델의 구조적 형태가 프로그래밍 언어일 뿐이죠. 크게 보면, 프로그램 합성은 기계학습의 또 다른 적용 사례일 수 있습니다.
그렇다면 왜 자동으로 프로그램을 작성하려는 것일까요? 사람이 만들어낸 소스 코드는 오류(버그)에서 벗어나지 못합니다. 앞선 예제에서, 배열의 시작점을 0이 아닌 1로 간주해서 배열의 범위를 벗어난 계산을 하게 된다거나, 정렬의 방향을 오름차순이 아닌 내림차순으로 하는 등의 실수가 항상 발생할 수 있다는 겁니다. 하지만, 컴퓨터가 프로그램을 작성한다면, 이러한 실수가 나타나지 않을 것이라 기대할 수 있습니다. 즉, 프로그램 합성을 활용하면 더욱 안전한 프로그램을 만들 수 있습니다.
프로그램 합성은 안전한 코딩 외에도 다양한 보안 연구에 적용되고 있습니다. 그 대표적인 사례가 바로 난독화된 코드의 해제입니다. 악성코드에는 역공학을 어렵게 하려고 다양한 난독화 기술을 사용합니다. 여기서 주목할 점은 난독화가 적용되기 이전의 원본 코드와 난독화 이후의 코드는 모두 똑같이 동작해야 한다는 것입니다. 즉, 하나의 값을 원본 코드와 난독화된 코드에 각각 입력해도 항상 같은 출력값을 얻어야만 하는 것이죠. 이러한 관점에서 본다면, 난독화된 코드에서 구할 수 있는 입출력의 쌍을 통해 프로그램을 합성해낼 수 있을 것이고, 이렇게 합성된 프로그램은 난독화된 코드와 같은 동작을 하면서도 보다 간결한 코드로 나타날 것입니다. 즉, 프로그램 합성을 통하면 난독화를 일반적으로 해소할 수 있는 것입니다.
▲차상길 카이스트 사이버보안연구센터장[사진=KAIST CSRC]
지난 칼럼에서 살펴본 퍼징이나 프로그램 합성 모두 그것을 보는 관점에 따라 인공지능과 같은 형태, 같은 동작 방식을 갖습니다. 하지만 안타깝게도 우리 사회는 인공지능에 얼마나 포괄적인 의미가 있는지 관심을 두지 않은 채, 오로지 인공지능이라는 그 키워드에만 집중하고 있습니다. 오죽하면 ‘인공지능’이라는 키워드가 없으면 과제를 만들기 어렵다는 우스갯소리마저 나오고 있습니다. 하지만, 시야를 조금만 넓히면 우리가 하는 수많은 컴퓨터 과학, 컴퓨터 보안의 기술들이 이미 인공지능의 범주에 포함되는 것이 아닐까 생각해 봅니다.
[글_ 차상길 KAIST 사이버보안연구센터 센터장]
<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>