본문 바로가기

개발&컴퓨터/DB

MS-SQL 기본 포트(1433포트) 변경하기 - 무차별 대입 공격 막기

반응형

MS-SQL은 데이터 통신 시, 기본 포트로 1433포트를 사용합니다.
MS-SQL과 접속 연동하느 DB프로그램 등을 짤 때, 별도의 포트를 지정하지 않는다면 알아서 1433포트로 설정되게 됩니다.

그런데 1433포트라는 것이 MS-SQL의 공개된 포트이다 보니, DB의 정보를 갈취하려고 외부에서 접속을 시도할 때, 대부분 1433포트를 찔러보게 됩니다. 계정과 비밀번호를 복잡하게 해 놓았다면 뚫리지는 않겠지만, 아래 처럼 MS-SQL 접속 로그 파일을 열어보면 끊임없이 접속 시도를 하는 로그를 보실 수 있게 됩니다.

일명 브루트 포스(Brute Force Attack)라는 공격 시도인데, DB암호를 풀기위해 무차별로 비밀번호를 대입해가면 DB에 접속 시도하는 것입니다.  

재미있는 것은 종종 다른 아이디로 접속 시도하기도 하지만 대부분 'sa'라는 아이디는 고정시키고, 비밀번호만 변경하면서 접속을 시도합니다. (접속 시도 IP도 볼 수 있지만, 캡쳐 화면에서는 제외함)

그 이유는 MS-SQL을 설치하면 기본으로 생성(관리자가 변경하지 않는다면)되는 계정 명이 sa (system administrator) 이기 때문입니다. 즉, sa는 기본 계정이고, 또한 최고 권한 계정이기 때문에 관리자가 게을러(?)서 기본 설정 그대로 놔두었다면 뚫기 가장 쉬운 계정이기도 하고, 뚫었을 때, 최고 관리자 권한을 가질 수 있기 때문입니다.

* 그러니 중요한 것은 비밀번호를 복잡하게 하는 것도 좋겠지만, sa 계정명 자체를 바꾸는 것이 좋습니다. 그러면 위의 캡쳐 화면에서의 공격은 존재하지 않는 아이디로 접속 시도하는 것이기 때문에 암호 대입 조차 하지 않고, 접속 실패가 되게 됩니다.

 

이야기가 조금 다른 곳으로 새었는데, 그러면 왜 1433포트를 변경하려고 할까요?

일단 저런 접속 시도 자체가 시스템에 부하를 주게 됩니다. 초단위로 수~수십번의 접속 시도 요청은 어차피 시스템에서 처리해야 되기 때문입니다. 그러면 자연스레 다른 처리가 늦어져 성능이 저하되겠습니다.

그러면 윈도우 방화벽이나 물리 방화벽을 설치하면 되지 않느냐? 물론 그러한 방법을 쓰는 것이 가장 좋습니다. 인증된 IP의 접속만 허용하고, 별도의 물리 방화벽을 두면 DB서버까지 접근 조차 되지 않겠죠.

그런데 부득이 내부 인프라망에서만 쓰는 DB가 아니고(관공서나 대기업 같은 회사에서는 이런 케이스는 거의 없을겁니다.), 부득이 외부 업체에서도 DB를 열어줘야 하는 데에 그 접속하는 시스템의 아이피가 고정적이지 않다. 이러면 아이피를 차단할 수도 없습니다. (다른 해결 방법도 많지만, 여기서는 포트 변경에 대한 것이므로 설명은 제외하겠습니다.)

그러면 DB가 외부에 오픈되어야 하고, 포트도 1433 포트가 열린다면 위의 캡쳐 화면같이 무차별적인 공격을 받게 됩니다. 그럼 1433포트를 닫고, MS-SQL이 다른 포트를 사용하도록 변경하고, 그 포트를 DB에 접속하는 외부 업체에만 알려주는 것입니다. 그러면 위와 같은 공격은 원천적으로 차단됩니다. (시스템의 수 많은 모든 포트를 일일이 확인하면서 공격하는 케이스는 거의 없습니다.)

즉 MS-SQL의 기본 포트만 변경해도 위와 같은 무차별 대입 공격은 거의 없어집니다.

그러면 이제 기본 포트 변경 방법을 알아보겠습니다.! 아주 간단해요~^^

--------------------------------------------------------------------------------------------

MS-SQL 기본 포트 변경 방법 (MS-SQL 2005 기준)

 1) 서버의 시작 버튼 메뉴를 통해 SQL Server Configuration Manager 프로그램을 실행시킵니다.

 

2) SQL Server Configuration Manager 가 실행되면 좌측 트리 메뉴에서 MSSQLSERVER에 대한 프로토콜을 선택하고, 우측 화면에서 TCP/IP 프로토콜을 선택(더블클릭)합니다. 

 

3) TCP/IP 속성 창이 뜨면 상단의 IP주소 탭을 선택하고, 화면 가장 하단으로 이동하면 IPAll 을 선택하는 영역이 있습니다.
여기에서 TCP포트를 사용하기 원하는 것으로 변경합니다.
 (주의!)
 - 포트 변경 시, 사용하려는 포트는 방화벽에서 풀어줘야 합니다. (윈도우 및 물리 방화벽 모두 확인!)
 - 포트는 무한대 번호를 제공하지 않고, 1~ 65535 까지 존재하면 보통 1,000번 미만대 번호는 예약되어 사용되는 포트들이 많으므로 1만번대 이상으로 사용하시기를 권장합니다. 포트 충돌 방지!)

 

4) 확인 또는 적용을 누르면 끝! SQL-Server를 재시작 하면 적용됩니다!

--------------------------------------------------------------------------------------------

한가지 더!

해당 DB에 접속하는 프로그램을 짤 때, Connection 객체 생성 시, DB접속 구문이 기존에는 다음과 같았다면 (OleDB를 사용하고, DB서버 아이피가 100.100.100.100 이라면)

"PROVIDER=SQLOLEDB;SERVER=100.100.100.100;UID=db_test;PWD=12345!@#$;DATABASE=TEST_DB"

뒤에 새로 변경된 포트만 붙여서 아래와 같이 접속하는 코드를 짜면 됩니다.

  "PROVIDER=SQLOLEDB;SERVER=100.100.100.100,20100;UID=db_test;PWD=12345!@#$;DATABASE=TEST_DB"

 

 

 

 

반응형