많은 개발자가 프로그램을 작성하면서 보안의 중요성에 대해 들어봤을 것이다. 그러나 막상 안전한 프로그램을 만들기 위해서 무엇을 고려해야 하는지 알지 못하거나, 알더라도 그 치명적임을 체감하지 못해서 가볍게 여기는 경우들이 있다. 이러한 문제의 해결에 도움이 되기 위해 간단한 보안 지식과 해킹 방법들을 공유하는 시리즈를 작성해본다.
보안의 필요를 알기 위해서는 해킹에 대한 이해가 필요하다. 해킹은 컴퓨터 시스템 또는 네트워크에 불법적으로 접근하거나 제어하기 위해 사용되는 기술 또는 활동을 의미한다. 해커는 개인 정보를 탈취하거나 변조하고, 시스템을 마비시키는 등의 행위를 할 수 있다. 이러한 해킹을 하기 위해 해커는 시스템이나 프로그램의 취약점을 이용하거나, 시스템이나 프로그램을 이용하는 사용자의 심리를 이용한다. 우리는 이 두 방법 중 사회공학적 해킹 방법인 후자를 제외하고, 기술적 해킹에 관해 이야기를 해보도록 하겠다.
취약점은 컴퓨터 시스템, 네트워크, 소프트웨어 등에 존재하는 보안상의 결함이나 취약한 점을 말한다. 이러한 취약점은 해커나 악의적인 공격자들이 공격을 시도하고 시스템을 침해하는 데 이용될 수 있다. 때문에 개발자들은 이러한 취약점들을 최대한 줄이고, 회피하는 방향으로 프로그램을 만들어야 한다.
시리즈의 본격적인 시작에 앞서, 안전한 프로그램을 만들기 위해 개발자가 신경을 써야 하는 몇 가지에 대해 간단하게 짚어보자.