공통 코드 서명 – 여러분이 개발한 프로그램, 컴퓨터 바이러스처럼 보이지는 않나요?
2021.05.12 16:43
- 원문 링크: https://blogs.embarcadero.com/do-all-your-windows-applications-look-like-a-computer-virus/
- 작성자: 이안 바커 (Ian Barker)
멋진 프로그램들을 만들어오신 개발자분들이 정말 많습니다. 현대적인 접근 방식도 취하고 계실거구요. 저희가 공유한 플루언트 UI 시리즈에서 현대화에 대한 내용을 많이 다루었죠. 비주얼이 정말 중요한데요. 아마도 네오-스큐어모피즘(Neo-skeuomorphism: 웹의 구성요소, 프레임, 화면 등을 디자인할 때 사용하는 스큐어모피즘이라는 기법을 현대적으로 변형한 방식)을 적용한 분들도 계실 것입니다. VCL에서는 어떤가요? 윈도우 10 다크 모드 / 라이트 모드 중 어떤 걸 선호하세요?
현대화를 하지 않았다면, 지금은 잘 작동하고 있을 수 있습니다…여러분의 앱 사용자들이 무언가를 바꾸려고 하지 않는다면 말이죠.
한 번 볼까요? 여러분의 프로그램 사용자들이 애플리케이션을 다운로드 받을 수 없다는 불만을 제기하기 시작합니다. 최신 웹 브라우저 보안에 대한 두려움이 있는 고객이라면, 이를 예방하기 위해 더 철저한 관리를 하게 됩니다. 그러다 보면 여러분의 앱은 윈도우 10에 의해 차단되거나, 기업 보안 정책에 따라 막힐 수도 있죠.
마지막으로 하나 더: 여러분의 코드가 트로이 목마와 같은 바이러스에 감염되지 않았음을 증명할 수 있는 코드 서명이 필요합니다.
코드 서명(Code-signing) 은 무엇일까요?
코드 서명은 수동으로 설정하는 작업으로, 애플리케이션 최종 빌드 시점 또는 그 직후에 나타나도록 할 수 있습니다. 설정해 놓으면, 디지털 서명이 포함된 exe 에 작은 리소스가 추가됩니다. 서명에는 코드 작성자 식별과 애플리케이션 exe 파일의 검사합(checksum)을 확인할 수 있는 정보들이 들어있습니다. 이 정보 – 코드 서명 -을 통해 애플리케이션을 실행한 사용자는 이 프로그램의 실행 파일이 개발자의 PC나 빌드 서버에서 만들어진 이후 수정되지 않았는지 확인할 수 있습니다. 예를 들어, 바이러스로 인해 exe를 변경하면 암호화 체크섬이 손상되어 사용자들은 문제가 발생했음을 알 수 있는 것입니다.
웹링크를 통해 앱을 배포하는 경우 코드 서명은 거의 필수입니다.
코드 서명은 본래 개발사 확인 뿐만 아니라 웹 사이트나 이와 비슷한 온라인 전달 매커니즘에서 프로그램을 다운로드 할 때도 중요한 역할을 합니다. 대부분의 브라우저 (아마 전부)는 웹 사이트에서 exe 파일을 다운로드할 때 경고 메세지를 띄웁니다. 특히 HTTPS를 사용하지 않는 경우라면 더더욱 그렇죠. 윈도우에서 마이크로소프트 엣지(Microsoft Edge)를 사용하는 환경에서 웹 사이트를 통해 exe 파일을 다운로드해 본 적 있으세요? 디지털 서명 – 코드 서명을 이렇게도 부르죠 – 이 없는 파일이면 정말 적극적으로 위험성을 알려줍니다.
서명이 없는 앱은 컴퓨터 바이러스처럼 보일 수 있습니다.
사용자가 여러 단계를 지나서 드디어 exe 파일을 컴퓨터에 다운로드 받았을 지라도, 마술처럼 다운로드된 파일이 없을 수 있습니다. 이는 기업 네트워크에서 막았기 때문인데요. 사용자가 신뢰할 수 있는 특정 애플리케이션만 실행할 수 있다는 규정이 적용되었기 때문입니다. 이런 경우는 정말 흔히 일어나는 일입니다. 코드 서명이 없다는 것은 일반적으로 해당 애플리케이션을 신뢰할 수 없음을 의미합니다. 더 나아가 이는 일반적이지 않다고 보는 경우도 많습니다. 어떤 사용자들은 애플리케이션들은 윈도우 서비스와 특히 서버용 애플리케이션들이라면 64비트여야 한다고 주장하는 경우도 있습니다. 기업 네트워크 관계자나 ITSec 관계자들은 많은 사용자들이 접속하는 스트리밍, 의심스러운 첨부 파일 열기, 실수로 악성 프로그램을 실수하는 등의 작업을 막을 수 있습니다. 이런 강요 조항이 있으면 사용자들은 당황할 수 있죠.
여러분의 애플리케이션이 혹시, 코드 서명이 없는 프로그램은 아닌가요? 만약 그렇다면, 여러분의 애플리케이션이 그들에게는 최악의 해커처럼 보일 수도 있다는 점을 기억하세요.
코드 서명은 블루칩(blue chip) 기업들만을 위한 것인가요?
코드 서명은 필수입니다. 특히 여러분이 작성한 코드로 수익을 창출하고자 하는 경우라면 필수 중의 필수입니다. 오픈 소스 또는 프리웨어인 경우일지라도 코드 서명이 있다면 여러분의 사용자들에게 도움이 될 것입니다.
단순히 실행 파일을 만들고 웹 서버에 올려놓기만 하는 시대는 이제 갔습니다. 여러분의 소프트웨어를 이런 예전 방식으로 제공한다면, 정말 슬프게도: 그 소프트웨어는 시대에 뒤떨어진 것이고, 현대화를 해야만 합니다. 곧 윈도우 운영 방식에 많은 변화가 있을 것입니다. UAC, HTTPS, 강제 디렉토리 보호 등 보안 향상 기능 측면에서 많은 변화가 있을 것이고 이는 일방적으로 바로 수행될 것입니다. 그리고 이미 수행되고 있는 것들도 많습니다.
질문 받은 것들 중 가장 많은 것이 바로 코드 서명이었던 것 같습니다. 그만큼 대단히 중요한 주제입니다. 개발자에게 있어 코드 서명은 선택 항목이 아니라는 이야기를 꼭 해드리고 싶습니다.
코드 서명에 대한 더 많은 정보들
코드 서명에 대해 알아두면 좋을 자료들은 아래 링크들을 참고해보세요:
다양한 코드 서명 유형들을 예제와 함께 설명해놓은 자료입니다. 비용 효율적인 코드 서명 인증서에 대한 내용도 있습니다: https://www.codedotshow.com/blog/delphi-10-3-rio-code-signing-provisioning-and-the-microsoft-app-store/
코드 서명이 필요한 이유를 확인할 수 있습니다: https://en.wikipedia.org/wiki/Code_signing
코드 서명을 활용하면 좋은 점들을 정리한 글입니다: https://www.encryptionconsulting.com/code-signing-top-5-benefits/ 그리고 https://www.globalsign.com/en/blog/the-importance-of-code-signing-redux