랜섬웨어 대응, 서버 및 워드프레스 필수 보안 설정 15가지

| Updated

이번 인터넷나야나의 랜섬웨어 사태를 보면서 새삼 백업과 보안의 중요성을 느끼게 해주었습니다. 며칠동안 부족한 실력을 총 동원해서 2중, 3중의 백업 체계를 세웠는데요.

랜섬웨어 대응, 매일 매일 자동으로 드롭박스(Dropbox)로 백업 받는 방법

오늘은 사이트 보안을 더 강화할 수 있는 방안이 무엇일까 정리해 보겠습니다.
계속 말씀드리자면 제가 글을 쓰는 이유는 저와 같은 초심자들이 삽질을 조금 덜하고자 조그마한 정보라도 공유하고자 합니다. 전문가 분들에게는 별 도움이 안될 수 있습니다.

1. 테마, 플러그인 등 소프트웨어를 최신으로 유지

뭐 당연한 이야기 일수도 있습니다.

며칠 전 사내 컴퓨터 수리 엔지니어와 이야기할 기회가 있었는데요. 저는 M.2 설치를 위해서 서비스를 요청한 상태였습니다. (저희 회사는 컴퓨터 부품을 개인이 직접 변경하지 않고 반드시 서비스 업체에 의뢰토록 하고 있습니다.)
그 분이 최근 랜섬웨어때문에 진짜 바쁘다고 하더군요. 아니 감염된 PC가 있느냐고 했더니 감염되지는 않았지만 이상 반응을 보이는 PC들이 많다고 합니다. 그런 PC들의 100%가 실험실 등에서 실험용으로 강제 업데이트 대상들이 아니므로 예전 버젼이나 패치하지 않은 상태에서 사용하던 PC들이라고 하더군요. 그리고 정상적으로 OS 업데이트 및 패치들이 이루어 졌으면 아무런 문제가 없었다고 합니다. 그만큼 최신버젼으로 업데이트 및 보안 패치가 중요하다는 말씀도 하시더군요.

2. 자주 업데이트 되는 믿을 수 있는 소프트웨어 사용

사실 소프트웨어는 완벽할 수 없고 해킹하는 입장에서도 해킹 기술을 끊임없이 발전시키므로 계속되어 문제점이나 취약점이 발견될 수 밖에 없습니다.
이 때 얼마나 빨리 이런 문제점 또는 취약점을 보완해 업데이트 해주느냐가 중요합니다.

그런 의미에서 비록 유료지만 제대로 업데이트되고 보안 패치되는 프로그램만 사용하는 것도 이제는 매우 중요해졌습니다.

무료 프로그램이 나쁘다는 이야기는 절대 아닙니다.

아주 빠르게 변하고 있고 지속해서 문제점과 취약점이 나타나고 있는 상황이라면 이런 변화를 제때에 바로 바로 대응해 줄수 있는 프로그램이냐는 것이 매우 중요합니다. 무료 프로그램이면서 이런 조건을 충족한다면 당연히 이걸 사용해야지요.

하고싶은 이야기는 이제는 조금 비용을 들이드라도 보안에 신경을 써야한다는 점을 이야기하고 싶습니다.

워드프레스 테마나 플러그인 list를 보면 워드프레스 최신버젼에서 충분히 테스트 되었다는 문구가 나오는데요. 이런 문구가 있는 플러그인 또는 테마를 사용하는 것이 중요하다는 생각을 합니다.

이제는 한두푼 아끼려다 사이트 전체를 날리는 사태가 올 수 있기 때문에 보안을 위해서라도 믿을 수 있는 테마, 플러그인등을 선택할 필요가 있습니다.

3. 비밀번호(패스워드)는 최대한 어렵게

해커들은 입력 가능한 모든 문자열을 무차별적으로 대입하여 비밀번호를 알아내기도하고 , 해커들이 사용하는 패스워드 사전에서 흔하게 쓰이는 비밀번호들 중 가능성이 높은 것들을 차례로 대입하여 쉽게 패스워드를 알아 내기도 합니다.

따라서 보안이 강화된 패스워드를 사용하기 위해서는 최대로 어려운 비밀번호(패스워드)를 사용해야 합니다. 어느 분이 그러던데요. 사람들이 기억할 수 있는 위운 비밀번호보다는 포스트잇에 적어 둔 어려운 비밀번호가 훨 났다고 .. 사용자 PC앞에 붙여 놓은 포스트 잇을 훔쳐갈 수 있는 해커는 없다고.. (물론 해커가 같이 살고 있는 동생이라면 가능하겠죠.)

첫째, 단순한 단어로 만드는 것을 피해야 합니다.

둘째, 일반 사이트에서 사용하는 사용하는 패스워드를와 동일한 패스워드를 사용하면 안됩니다. 다른 사이트에서 보안이 뚫리면 같은 패스워드를 사용하는 사이트도 바로 뚫릴 수 있기 때문입니다.

셋째, 워드프레스 시스템에 필요한 서버 계정 패스워드, 서버 패스워드, SSL패스워드, 워드프레스 관리자 계정 패스워드등등의 패스워드를 모두 다르게 사용하는게 좋을 것 같습니다. 같은 것을 사용한다면 사이트가 한층 깊게 완벽하게 털릴수 밖에 없습니다.

넷째, 패스워드를 문자+아리바아 수사 + 특수문자 + 대소문자 구분 등을 모두 사용해 쉽게 유추할 수 없도록 패스워드를 만드는게 필요합니다. 저도 처음에는 길면 귀찮기 때문에 6자 정도로 패스워드를 만들었는데 지금은 15자이상되는 패스워드를 사용하고 있습니다.

이번 인터넷나야나 사태로 보안, 백업등이 이슈화되면서 나오는이야기 중에서
웹호스팅업체중에서는 이렇게 보안이 강화된 패스워드를 지원하지 않는 곳도 있다고 하네요. 예를 들어 ivyro 호스팅은 SSH와 데이타베이스 그리고 홈페이지 계정 암호를 평문으로만 가능하다고 합니다, (XETOWN에서 flhelp님 의견 참조) 이런 업체의 경우는 이용하지 않는 게 좋을 것 같습니다.

나야나 … 서버 패스워드를 엑셀로 관리..헐

아래는 WPS Hide Login 에서 가져온 강력한 비밀번호를 만드는 방법입니다. 그래픽으로 만들어져 쉽고 재미있게 읽을 수 있습니다.

강력한 비밀번호 만들기 password-security

4. 워드프레스 관리자 이름 변경

지금은 많이 줄었지만 관리자 이름으로 그냥 admin을 사용하는 경우가 있는데요. 워드프레스가 디폴트로 admi을 관리자 이름으로 정하고 많은 서버 세팅시도 admin을 디폴트로 상요하다보니 admin 아이디로 해킹을 시작합니다.
이를 피하기 위해서는 관리ㅏ 이름을 유추하기 어려운 독특한 이름을 사용하는 게 좋다고 합니다.

보안-Security관련-구글-무료-이미지

5. 로그인을 원천 봉쇄하기

회원 가입이 중요한 커뮤니티 사이트라면 적용할 수 없지만 일반 사이트의 경우 회원 등록과 회원 로그인 없이 운영이 가능합니다. 회원들의 커뮤니티가 활발할 가능성이 없다면 차리리 회원 등록과 로그인을 막아 안전하게 운영하는 것이 더 나은 선택일 수 있습니다.

저의 경우도 워드프레스로 이전한 다음부터는 회원을 받지 않고 있니다. XE 시절 몇만의 회원이 등록되었지만 99%가 스팸성 회원이었습니다.
따라서 워드프레스로 이전하면서부터는 과감하게 회원을 받지 않기로 했습니다.

이렇다고 해도 워드프레스의 로그인 주소인 http://www.example.com/login로 등록을 시도할 수 있습니다.
이런 시도 자체를 막기위해서

첫째 방법은 로그인 주소http://www.example.com/login를 자신만이 알 수 있는 주소로 변경하는 것입니다. 그러면 일반적으로 해커들이 알고 있는 로그인 페이지로 접근하면 없는 페이지(404 에러)로 연결됩니다.
이는 이렇게 주소를 바꾸어주는 플러그인 WPS Hide Login 을 이용할 수 있습니다.

둘째 방법은 wp-login.php에 접근할 수 있는 IP를 제한하는 것입니다.
이는 아파치 서버의 경우 .htaccess 파일에 아래와 같은 코드에서 허용하는 IP를 적어 이 IP만 접속 가능토록 합니다.

12.11.22.33.44은 IP address를 의미합니다.

nginx 설정

NGINX 서버를 사용하고 있다면 /etc/nginx/nginx.conf 파일에서 아래 내용을 추가합니다.

location ~ ^/(wp-admin|wp-login.php) {
allow 11.22.33.44;
deny all;
}

apache 설정

apache를 사용하고 있다면 .htaccess에 다음을 추가해 줍니다.

<Files wp-login.php>
Order Deny,Allow
Deny from All
Allow from 11.22.33.44
</Files>

참고로 우리집의 IP address 확인은 명령 프롬프트에서 ipconfig를 쳐서 알수 있으며 또는 IP address를 알려주는 사이트를 활용할 수 있습니다.우리집 IP address 확인하기 에서 확인할 수 있습니다.

6. ssh 포트 변경

아래 내용은 q style=”text-align: left; color: #2196f3 ; font-size: 1.2em; “>가상서버호스팅에서 서버 보안 설정 방법 – Nginx +Ubuntu 16.04의 경우의 내용을 인용하였습니다.

일반적으로 ssh포트를 22번을 사용하는데 이는 너무 알려진 포트이므로 이를 이용해 공격해오는 경우가 있다고 한다. 따라서 자기만아는 포트 번호로 변경 사용하는 게 필요하다.

이를 위해서는 먼저 sshd_config에서 22번대신 사용할 포트 번호로 바꾸어 준다. 즉

/etc/ssh/sshd_config 에서 Port 22 를 찾아서 자기가 사용할 포트 숫자를 기억하기 쉽고 10000자리이상에서 임의의 숫자를선택한다. 예를 들어 58722, 65322 등등

이렇게 포트를 변경한 후 ssh 서비스를 재시작 합니다.
그리고 기존 ssh port로 사용했던 22번 포트는 접속할 수 없도록 막아줍니다.

ufw enable  # 방화벽을 활성화한다.
ufw allow 80/tcp  # 일반 웹 정보 관련 입출력 통로
ufw allow 443/tcp  # SSL 설치 시 웹정보 관련 입출력 통로 
ufw allow ****/tcp  # ssh를 위한 포트, 22번 포트는 너무 알려져 있어 여기로 공격하는 경우가 많아 포트를 바꾼다.
ufw deny 22/tcp  # ssh용으로 22포트를 사용할 수 없게 한다.

7. Ubuntu 방화벽 – ufw 설정

방화벽을 세팅해 최소한의 포트만 열어 놓는다.

ufw enable  # 방화벽을 활성화한다.
ufw allow 80/tcp  # 일반 웹 정보 관련 입출력 통로
ufw allow 443/tcp  # SSL 설치 시 웹정보 관련 입출력 통로 
ufw allow ****/tcp  # ssh를 위한 포트, 뒤에서 설명하겠지만 22번 포트는 너무 알려져 있어 여기로 공격하는 경우가 많아 포트를 바꾼다.

8. Fail2ban을 설치하여 보안을 강화

로그를 분석해 의심스러운 접근을 금지시키는 방법이 DenyHosts나 Fail2Ban이라는 프로그램입니다.

이 중 Fail2ban은 DenyHosts보다 훨씬 진보된 방식으로 SSH, Apache, Courier, FTP 등등에서 의심스러운 접근을 차단할 수 있는 프로그램입니다.

Fail2ba은 로그 파일을 모니터링해서 넘 많은 패스워드 입력 실패나 공격 감행 징후들이 보이면 IP를 차단합니다.

먼저 Fail2Ban을 설치하자.

apt-get install fail2ban

그 다음 설정을 변경한다. 이는 jail.conf 파일을 수정해야 한다.

vi /etc/fail2ban/jail.conf

여기에서 ignoreip, bantime, findtime , maxretry 등을 수정해서 재구성한다.

  • ignoreip에는 ban을 하면 않되는 IP를 적는다. 10.100.102.103/32 형식으로 적으며, 추가는 스페이스바로 구분한다.
  • bantime은 접속 차단 시간으로 기본이 600(10분)으로 되어 있음
  • findtime은 통계를 찾을 시간.
  • maxretry 는 fail 횟수이다. 기본으로 5가 세팅되어 있는데 이 정도면 충분하다고 보고 유지했다.

9. ping 금지

아래 내용은 가상서버호스팅에서 서버 보안 설정 방법 – Nginx +Ubuntu 16.04의 경우의 내용을 인용하였습니다.

해킹 목적으로 네트워크 침입을 시도 時 핑(Ping)을 통해 특정 서버가 살아있는지 확인하는 경우가 많고, 고전적이긴 하지만 DDOS 공격 시 무한 핑(ping) 요청으로 서버를 무력화를 시도하는 경우도 있기때문에 핑(ping)을 허용하지 않는 게 좋다.

이를 위해서는 방화벽 정책을 변경해 준다.
변경해야하는 설정 파일은 아래 경로를 참조

/etc/ufw/before.rules

아래 명령에서 ACCEPT를 DROP으로 변경하거나 삭제해 준다.

  -A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT  → DROP으로 변경
  -A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT   → DROP으로 변경
  -A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT   → DROP으로 변경
  -A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT   → DROP으로 변경
  -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT   → DROP으로 변경

10. 서버 운영, 정기적 보안 패치 및 공신력있는 저장소의 패키지만 사용

서버를 사용하고 있다면 정기적으로 터미널(shell)에 접속해 보안 패치를 비롯한 업그레이드 및 업데이트를 진행합니다,

apt-get update 
apt-get upgrade

그리고 출처를 알 수 없는 프로그램 사용하지 말고 공신력있는 저장소의 패키지만 설치합니다.
예를 들어 CentOS는 epel / remi / webtatic 등, 우분투(Ubuntu)는 ppa 등

11. 서버 운영, 서버 표시 정보 최소 노출

보안의 기본 중의 하나는 해커에게 서버 관련 정보를 가능하면 주지 않는것인데요.
서버에 관련된 정보도 최소한도록 노출이 되도록 설정할 필요가 있습니다.

nginx에서는 nginx.conf 의 http 항목에 다음 내용을 추가합니다.

http {
    server_tokens off;

12. 서버 운영, 보안 강화 HTTP 헤더 사용

HTTP 헤더에 보안을 강화하기 위한 여러 헤더를 적용합니다.
아래 내용은 우리집 IP address 확인하기에서 인용하였습니다.

  • X-Frame-Options : 클릭 하이재킹을 방지하기 위한 헤더로 deny로 설정하면 iframe 에서 렌더링을 하지 않습니다. sameorigin 은 origin이 일치하지 않을 경우 렌더링을 하지 않습니다.
  • X-Content-Type-Options: “nosniff” 만 설정할 수 있으며 잘못된 MIME 형식이 포함된 응답을 거부.aspx)합니다.
  • X-XSS-Protection: IE와 Chrome 브라우저가 지원하며 특정 유형의 XSS(cross site script)공격.aspx)을 차단해 줍니다.

nginx 설정

add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

apache 설정

Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
Header set X-XSS-Protection "1; mode=block"

13. 서버 운영, 퍼미션 최소화

워드프레스 파일을 외부 사용자가 마음대로 수정, 해킹하는 것을 막기위해서는 파일 권한을 최소화해야 합니다.
특히 꼭 필요한 경우가 아니면 777 사용하면 안됩니다.

아래는 워드프레스에서 권장하는 파일 권한입니다.

  • 모든 워드프레스 파일은 관리자 유저가 소유해야 한다.
  • 모든 워드프레스 파일은 644 권한 (관리자의 읽기/쓰기 권한, 소유하는 그룹의 읽기 권한, 모든 유저들의 읽기 권한)으로 설정해야 한다.
  • 모든 워드프레스 폴더는 755 권한 (관리자의 읽기/쓰기/실행 권한, 소유하는 그룹의 읽기/실행 권한, 모든 유저들의 읽기/실행 권한)으로 설정해야 한다.
  • 워드프레스 계정이 수정할 수 있어야 되는 파일들은 적어도 그 파일들을 소유하는 그룹 안에 워드프레스가 사용하는 계정이 포함되어 있어야 한다.
  • 워드프레스가 사용하는 계정이 관리자 계정과 다르다면 워드프레스가 수정해야 하는 파일들의 권한을 644에서 664로, 폴더들은 755에서 775로 바꿔야한다.
  • wp-config.php는 600 권한 (관리자의 읽기/쓰기 권한)으로 설정해야 한다

14. 서버 운영, 서버의 중요 파일 접근 차단

웹서버에서 URL Re-writing 을 처리하거나 주요 옵션을 성정한 \ .htaccess 나 워드프레서 설정값을 보광하고 있는 wp-config.php, git 그리고 subversion의 형상 관리 메타 정보(.git, .svn), 설정 파일(.inc, .ini, .cfg, .conf) 같은 매우 중요요 파일들이 있습니다.
해커가 이런 파일을 내려 받아 서버의 정보를 파악할 수 있으므로 이런 파일에 대한 접근을 차단 합니다.

nginx 설정

location ~ /\.(ht|git|svn) {
    deny all;
}
location ~ /wp-conf* {
    deny all;
}
location ~ /.*\.(inc|ini|conf|cfg)$ {
    deny all;
}

15. 워드프레스 알림판(Dash Board)에서 파일 수정 금지

워드프레스 관리자 계정으로 로그인 시 워드프레스 알린판(Dash board)에서 plugin, theme 등의 PHP 파일을 수정할 수 있습니다.
해커는 로그인에 성공한 후 이런 PHP 파일에 악성 코드를 심는다고 합니다.
따라서 로그인이 뚫려도 PHP 파일 수정을 막으려면 모든 사용자가 파일 수정 권한을 박탈해야 합니다.

즉 사용자의 ‘edit_themes’, ‘edit_plugins’, ‘edit_files’ 권한을 제거할 필요가 있습니다.

이를 위해서는 wp-config.php에 다음 코드를 추가합니다.

define(‘DISALLOW_FILE_EDIT’, true);

서울에 생긴 Vultr 서버 100$ 프로모션 안내

안녕하세요?
새로운 사이트 구축을 위한 신규 서버를 고민하신다면 , 서울 리젼이 생겨 더욱 빨라진 Vultr 서버를 Vultr 100$ 프로모션으로 이용해 보세요.

아래 프로모션 코드 링크를 통해 Vultr에서 서버 구축 후 1달 이상 사용 및 $25이상 결제 時 추가 100$을 주는 프로모션을 진행 中입니다.

아래 이미지를 클릭해 등록할 수 있습니다.

Vultr는 서울에도 리젼이 있어 매우 빠르고, 아마존 웹 서비스(AWS)보다 성능이 높으며 가장 가성비가 뛰어납니다.

거기다 사용자 UI도 좋고, 15개까지 스냅샷을 무료로 제공하기 때문에 관리하기 좋습니다. 그리고 지금 100$ 프로모션처럼 가격적인 메리트도 있습니다.

저는 2016년부터 Vultr 서버를 사용했는데요. 지금까지 잘 사용해 오고 있습니다. 아래 사용기도 참고해 보세요.

도쿄 리젼과 비교해 본 Vultr 서울 리젼 사용기

가성비가 뛰어난 Vultr 가상서버호스팅(클라우드호스팅,VPS) 사용기

Vultr 가상서버호스팅의 새상품 High Frequency 사용기

가상 서버를 운영하고픈 勇者에게 전하는 가상 서버 운영 입문 노하우 – Vultr 가상서버호스팅(VPS)를 중심으로

해외 가상서버호스팅(VPS)이 국내 호스팅보다 빠르다? – 아이비호스팅과 해외 가상서버호스팅 VULTR간 비교

사이트 운영을 위한 안내 – 웹서버 세팅에서 워드프레스 설치까지(우분투 17.10, NGINX 1.13.6, Marian DB 10.2, PHP7.2)

워드프레스 최적화를 위한 18개월간의 고민, 그 노하우를 담다.

Subscribe
Notify of
guest
3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments