SQL Server 포트(기본 1433)가 인터넷에 열려 있으면 RDP와 마찬가지로 무차별 대입 공격을 받습니다. 공격 대상은 거의 언제나 sa 계정입니다.
기록 확인하기
SQL Server는 로그인에 실패하면 오류 18456을 SQL Server 오류 로그와 Windows 응용 프로그램 이벤트 로그(이벤트 ID 18456)에 남깁니다. 메시지는 이런 모양입니다.
Login failed for user 'sa'. Reason: Password did not match that for the login provided. [CLIENT: 203.0.113.45]
대괄호 안의 CLIENT가 시도한 IP입니다. 이 기록은 서버 속성의 보안 > 로그인 감사가 "실패한 로그인만"(기본값) 또는 "실패한 로그인과 성공한 로그인 모두"일 때 남습니다.
sa 계정 쓰지 않기
응용 프로그램이 sa를 쓰지 않는다면 비활성화하는 것이 가장 효과적입니다. 공격 도구가 아무리 대입해도 성공할 수 없습니다.
ALTER LOGIN sa DISABLE;
필요한 권한만 가진 별도 로그인을 만들어 쓰고, 가능하면 Windows 인증만 허용하는 것도 방법입니다.
포트 노출 줄이기
데이터베이스는 대부분 같은 서버나 내부망의 응용 프로그램만 접속하면 됩니다. Windows 방화벽에서 1433 포트를 필요한 IP에만 열어 두세요. 외부에서 꼭 접속해야 한다면 VPN을 거치게 하는 편이 안전합니다.
실패를 반복하는 IP 자동 차단
포트를 닫을 수 없는 환경이라면 18456 기록을 보고 실패를 반복하는 IP를 방화벽에서 막아야 합니다. 이 IP들은 대개 같은 시간에 RDP나 다른 서비스도 함께 두드리므로, 한 번 막을 때 모든 포트를 막는 것이 효과적입니다.
LogonShield로 자동화하기
LogonShield는 이 글에서 설명한 로그인 실패 기록을 실시간으로 읽고, 정해진 횟수를 넘긴 IP를 Windows 방화벽 규칙에 넣었다가 시간이 지나면 저절로 뺍니다. RDP, MS-SQL, FTP, OpenSSH, 메일 서버 등 13개 서비스를 지원합니다.