linux (ubuntu) 해킹 방어 (webserver, database 등)

개인 펫 프로젝트 용으로 AWS를 운영 중이라, 초기에 보안에는 크게 신경을 쓰지 않았는데

서버상태를 자세히 보니 여러 형태의 해킹흔적을 발견했다.

 

  1. Tomcat web-shell 악성코드 deploy

    ubuntu:/var/lib/tomcat8/webapps$ ls -lrt
    total 840
    drwxr-xr-x 3 root    root      4096 Mar 12 18:01 ROOT
    drwxr-xr-x 3 tomcat8 tomcat8   4096 Mar 14 00:35 mydata
    drwxr-xr-x 4 tomcat8 tomcat8   4096 Mar 19 21:03 wanli
    drwxr-xr-x 3 tomcat8 tomcat8   4096 Mar 27 00:17 aDRT
    drwxr-xr-x 3 tomcat8 tomcat8   4096 Mar 27 13:34 qdmS

    Tomcat admin site를 편의상 사용 중이 었는데, admin 계정의 password가 허술했던게 원인으로 보인다.
    해당 web-shell project들을 삭제하고 admin 계정의password의 복잡도를 올려 변경하였다.


  2. Database(MYSQL) 서버 접속 흔적 (mysql, error.log)

    error.log:2018-03-26T21:27:53.763227Z 7160 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:54.414126Z 7161 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:55.043999Z 7162 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:55.589774Z 7163 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:56.210796Z 7164 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:56.786349Z 7165 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:57.406633Z 7166 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:58.000088Z 7167 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:58.434606Z 7168 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:58.991067Z 7169 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:59.321888Z 7170 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:27:59.687066Z 7171 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:28:00.211582Z 7172 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:28:00.792386Z 7173 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:28:01.222343Z 7174 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:28:01.544091Z 7175 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:28:02.213445Z 7176 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)
    error.log:2018-03-26T21:28:02.845606Z 7177 [Note] Access denied for user 'root'@'43.226.33.xxx' (using password: YES)

    web-shell을 통해 취득한 db접속정보를 이용해 원격접속을 계속해서 시도한 흔적이 발견되었다.  mysql user host 접속 제한으로 denied 된 것으로 보이나,
    추가 적으로 접속가능 host를 제한하여 user 정보를 변경하였다.


  3. 접속자 IP정보 조회 및 IP차단 (linux – iptables)

    접속흔적이 남은 ip를 whois에서 searching 해보았다.  역시 나 중국으로 예상된다.

    iptables를 이용해 해당 ip를 차단 처리 하였다.

    root:/# iptables -A INPUT -s 43.226.33.156 -j DROP
    root:/# iptables -A INPUT -s 221.229.204.101 -j DROP
    root:/# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    DROP       all  --  43.226.33.156        anywhere
    DROP       all  --  221.229.204.101      anywhere
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    

     

AWS EC2 [t2.micro (무료)]에서의 Memory 관리

AWS의 무료 Instance (EC2, T2.micro)에 blog, mysql, webServer(tomcat) 등을 운영하려 하니

Memory Size가 1GB 밖에 되지 않아 메모리 문제가 발생한다. (cannot allocate memory)

 

  1. linux swap 할당 (기본적으로 AWS의 경우 swap이 할당되지 않은 상태로 instance가 생성된다.)

    > swap 할당 (2GB)

    root# dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048
    2048+0 records in
    2048+0 records out
    2147483648 bytes (2.1 GB, 2.0 GiB) copied, 30.9018 s, 69.5 MB/s
    
    root# sudo mkswap /mnt/swapfile
    Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
    no label, UUID=afb41407-0fa8-4e9f-a8ad-c05987b94518
    
    root# swapon /mnt/swapfile
    swapon: /mnt/swapfile: insecure permissions 0644, 0600 suggested.
    

    > 할당 상태 확인

    root# free
                  total        used        free      shared  buff/cache   available
    Mem:        1014540      280952       73624       27388      659964      536124
    Swap:       2097148           0     2097148
    

     

  2. MYSQL (innodb buffer size 조정)

    > /etc/mysql/my.cnf    (or)  /etc/mysql/mysql.conf.d/mysqld.cnf

    [mysqld]
    
    …
    innodb_buffer_pool_size = 64M
    …

    > MYSQL 재시작 후 적용 확인 (/var/log/mysql/error.log)

    2018-03-20T06:18:17.509059Z 0 [Note] InnoDB: Initializing buffer pool, total size = 64M, instances = 1, chunk size = 64M
    

     

AWS instance (ubuntu) – 표준 시간

AWS – instance (ubuntu) 생성 후 시간을 확인하니, UTC로 표시되어 진다.

KST로 변경을 위해 아래와 같이 변경처리

 

현재설정 확인

root# timedatectl
 Local time: Mon 2018-03-12 09:40:38 UTC
 Universal time: Mon 2018-03-12 09:40:38 UTC
 RTC time: Mon 2018-03-12 09:40:38
 Time zone: UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

 

가능한 timezone  리스트 확인

root# timedatectl list-timezones

 

timezone 설정변경

root# timedatectl set-timezone Asia/Seoul

 

UTC (협정 세계시) – 영국 그리니치 천문대(경도 0)를 기준으로 하는 세계의 표준시간대로서, 동경 135도를 표준시로 하는 우리나라보다는 9시간이 느림)

KST (한국 표준시)

linux (ubuntu) – 사용자(user) 관련 (생성/삭제/권한 등)

1 . adduser  : 계정생성시 비밀번호 까지 입력받으며 기본정보를 바로 입력.  홈 디렉토리 또한 자동으로 생성.

root# adduser tomcat
Adding user `tomcat' ...
Adding new group `tomcat' (1002) ...
Adding new user `tomcat' (1002) with group `tomcat' ...
Creating home directory `/home/tomcat' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for tomcat
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

 

2. useradd  : 순수계정만 생성되며 홈디렉토리, 비밀번호 설정은 별도로 필요.

3. usermod  : 계정의 Group, 홈디렉토리 등을 핸들링.

root# usermod -aG sudo tomcat

 

usermod -aG sudo