인프런 커뮤니티 질문&답변

changjunkim님의 프로필 이미지

작성한 질문수

웹 개발자라면 꼭 알아야 할 보안 기초

프롤로그(1)

방화벽

해결된 질문

23.11.01 20:31 작성

·

252

0

웹 보안의 구성 중 방화벽에서 "방화벽은 애플리케이션(웹 서비스 자체)에 대한 공격은 못 막습니다'라는 말이 이해가 잘 되지 않습니다.

조금 더 구체적으로 설명 부탁드리고 싶습니다.

답변 1

1

Jason님의 프로필 이미지
Jason
지식공유자

2023. 11. 01. 21:48

안녕하세요!
제가 방화벽과 관련한 내용은 구체적으로 다루지 않고 간단하게만 말하고 넘어가서 헷갈리신 것 같습니다.
다양한 종류의 방화벽이 있습니다만, 일반적으로 얘기하는 방화벽은 사용자의 요청이 서버에 닿기 전에 프로토콜, 포트를 보고 요청을 차단하는 장치를 이야기합니다(서비스 종류나 업종에 일반적으로 이야기하는 방화벽은 다를 수 있습니다).
예를 들어 웹 서비스에서는 tcp 80 또는 443을 사용하는데, 사용하지 않는 tcp 25번에 해당하는 요청이 들어오면 정상적인 경우가 아닌 요청이라고 생각할 수 있습니다. 방화벽은 이런 요청을 django, spring, express 등의 실제 코드가 실행되는 부분에 도달하기 전에 미리 제거합니다.

이제 tcp 22번을 예시로 이야기해보겠습니다.
원격 서버에서 접근해야 하는 경우, tcp 22번으로 SSH에 접속하여 서버 관리자의 ID와 비밀번호를 통해 로그인해야 합니다. 이때 악의적인 사용자가 자주 쓰이는 비밀번호를 대입해보면서 로그인을 시도하는 공격이 있다고 생각해보겠습니다. 이때 단순히 방화벽을 통해 Tcp 22번을 차단하는 것으로 해결하는 것은 어렵습니다. 왜냐면 tcp 22번을 차단하면 개발자도 서버에 접속할 수 없기 때문입니다. 그렇지만 예를 들어 사용하지 않는 TCP 25번을 방화벽을 통해 차단함으로써 잠재적인 보안 위협을 조금 덜 수 있습니다. 만약 방화벽이 없는 상태에서 실수로 tcp 25번 요청을 받는 애플리케이션, 내장 프로그램이 나도 모르게 실행되고 있었다면 좋지 않은 상황이 벌어졌을 겁니다. 이처럼 방화벽은 사용하지 않는 포트나 프로토콜에 대한 접근을 제한함으로서 서비스의 보안 강도를 높일 수 있으나, 사용해야 하는 포트나 프로토콜을 열어두었을 때 해당 포트나 프로토콜을 통해 발생하는 위협을 제거하는 것은 어렵다는 이야기였습니다.


물론 SSH를 다른 포트로 변경하거나, 강의 후반부에 나오는 화이트리스트 방법을 통해 이 리스크도 해결할 수 있습니다. 그리고 비록 열려있는 포트나 서비스라도 악의적인 접근을 능동적으로 차단하는 지능적인 방화벽도 존재합니다.
그러나 결국 서비스를 위해서는 열어두어야 하는 네트워크(포트, 프로토콜)가 존재합니다. 열어두지 않은 네트워크 포트나 프로토콜은 방화벽으로 막을 수 있으나, 열어두어야 하는 부분에 대한 보안 취약점, 리스크는 방화벽으로 막을 수 없습니다.