모든 내용을 실무에 바로 적용할 수 있도록 공격 명령어 분석, 웹 서버/DB/SSH 시스템별 구체적 방어 설정법을 상세히 나누어 설명해 드리겠습니다. > 네트워크/보안/해킹

본문 바로가기
사이트 내 전체검색

네트워크/보안/해킹

▒ Info Tech ▒ 네트워크/보안/해킹 ▒ 하드웨어 ▒ 소프트웨어
Information Technology Group
▒ Info Tech ▒ 네트워크/보안/해킹 ▒ 하드웨어 ▒ 소프트웨어

보안 모든 내용을 실무에 바로 적용할 수 있도록 공격 명령어 분석, 웹 서버/DB/SSH 시스템별 구체적 방어 설정법을 상세히 나누…

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 1회 작성일 26-08-01 06:05

본문

내용이 광범위해 보이지만, 본질적으로는 공격자가 악용하는 명령어의 패턴을 분석하고, 이를 서버 설정 파일과 운영체제 보안 명령어로 원천 봉쇄하는 과정으로 긴밀히 연결되어 있습니다.

모든 내용을 실무에 바로 적용할 수 있도록 공격 명령어 분석, 웹 서버/DB/SSH 시스템별 구체적 방어 설정법을 상세히 나누어 설명해 드리겠습니다.

PART 1. 3대 서비스 공격 명령어 상세 분석 및 추적 가이드

공격자가 터미널에 입력하는 명령어의 의미를 명확히 알아야, 침해 사고 발생 시 로그에서 해당 흔적을 찾아낼 수 있습니다. [1]

1. 웹셸(WebShell) 업로드 공격 분석

공격자가 웹 서버 업로드 기능을 우회하여 악성 스크립트를 올릴 때 쓰는 방식입니다. [1, 2]

  • 공격자가 업로드하는 악성 코드 예시 (webshell.php)

php

<?php system($_GET['cmd']); ?>

코드를 사용할 때는 주의가 필요합니다.

    • 설명: 웹 브라우저 주소창을 통해 전달받은 cmd 파라미터의 값을 리눅스 시스템 명령어(system)로 실행하라는 파괴적인 코드입니다.
  • 공격자의 웹 브라우저 실행 예시

text

http://target.com /etc/passwd

코드를 사용할 때는 주의가 필요합니다.

    • 설명: 위 주소를 호출하면, 서버 내부의 사용자 계정 명부인 /etc/passwd 파일 내용이 웹 브라우저 화면에 그대로 출력됩니다. 만약 cmd=rm -rf /를 입력하면 웹 서버 권한이 닿는 모든 파일이 삭제됩니다.

2. Hydra를 이용한 SSH 무차별 대입 공격 분석

bash

hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.100 -t 4 -V

코드를 사용할 때는 주의가 필요합니다.

  • -l root: 대상을 root(최고 관리자) 계정으로 고정합니다.
  • -P .../rockyou.txt: 칼리 리눅스에 내장된 약 1,400만 개의 비밀번호 사전 파일을 대입합니다.
  • ssh://192.168.1.100: 공격 대상의 IP와 프로토콜을 지정합니다.
  • -t 4: 동시에 4개의 접속 연결(스레드)을 시도합니다. 시스템 부담을 줄이면서 탐지를 피하기 위해 조절합니다.
  • -V: Verbose 모드로, 현재 어떤 비밀번호를 대입하고 있는지 실시간으로 화면에 출력합니다. [1, 2]

3. 웹 로그인 창을 노리는 SQL 인젝션 공격 분석

  • 공격자가 아이디 입력창에 넣는 구문

text

admin' --

코드를 사용할 때는 주의가 필요합니다.

  • 서버 내부에서 완성되는 SQL 쿼리문 예시

sql

SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'user_input'

코드를 사용할 때는 주의가 필요합니다.

    • 설명: SQL에서 --주석(코드 무효화)을 뜻합니다. 공격자가 싱글 쿼테이션(')으로 admin 조건을 닫고 뒤를 --로 날려버렸기 때문에, 비밀번호가 무엇이든 관계없이 admin 계정으로 무조건 로그인 승인이 떨어집니다. [1]

PART 2. 웹 서버 종류별(Nginx, Apache, Tomcat, IIS) 시나리오 및 방어 설정

각 웹 서버의 핵심 취약점 시나리오와 이를 막기 위한 설정 파일 수정 명령어입니다.

1. Nginx

  • 취약점 시나리오 (설정 오류): location 설정 미비로 인해, 공격자가 이미지 파일인 척 올린 파일(test.jpg/a.php) PHP 인터프리터로 강제 해석되어 웹셸이 실행되는 취약점이 자주 발생합니다.
  • 구체적 방어법 (업로드 디렉터리 실행 권한 제거)
    Nginx
    설정 파일(/etc/nginx/sites-available/default)을 열고 업로드 폴더 내 스크립트 실행을 차단합니다.

nginx

# /uploads/ 폴더 안의 php 파일 요청은 무조건 403 거부(Forbidden)

location ~* ^/uploads/.*\.php$ {

    deny all;

    return 403;

}

코드를 사용할 때는 주의가 필요합니다.

설정 적용 후 Nginx 재시작: sudo systemctl restart nginx

2. Apache

  • 취약점 시나리오 (디렉터리 리스팅): 서버 설정을 허술하게 하면, 웹사이트 주소 뒤에 폴더명만 쳤을 때 폴더 내부의 모든 소스코드와 파일 목록이 브라우저에 노출되어 중요한 설정 파일이 유출됩니다.
  • 구체적 방어법 (디렉터리 구조 숨기기 및 웹셸 방어)
    Apache
    설정 파일(/etc/apache2/apache2.conf 또는 .htaccess)을 수정합니다.

apache

# 1. 디렉터리 리스팅 금지 (Indexes 옵션 제거 또는 앞에 마이너스 붙이기)

<Directory /var/www/html>

    Options -Indexes +FollowSymLinks

    AllowOverride None

    Require all granted

</Directory>

 

# 2. 업로드 폴더 내 스크립트 엔진 정지

<Directory /var/www/html/uploads>

    RemoveHandler .php .phtml .php3

    RemoveType .php .phtml .php3

    php_flag engine off

</Directory>

코드를 사용할 때는 주의가 필요합니다.

설정 적용 후 Apache 재시작: sudo systemctl restart apache2

3. Apache Tomcat

  • 취약점 시나리오 (Web도구 취약점): 톰캣의 관리자 페이지(http://IP:8080/manager/html)의 계정이 admin / admin 같은 기본값일 경우, 공격자는 로그인 후 악성 자바 백도어가 담긴 .war 파일을 업로드(Deploy)하여 서버 전체를 장악합니다.
  • 구체적 방어법 (관리자 계정 차단 및 IP 제한)
    1. 톰캣 계정 파일(/etc/tomcat9/tomcat-users.xml)에서 불필요한 manager 권한 계정을 삭제하거나 비밀번호를 극도로 복잡하게 바꿉니다.
    2. 관리자 페이지 접근 IP 제한 설정 파일(/var/lib/tomcat9/webapps/manager/META-INF/context.xml)을 수정합니다.

xml

<Context privileged="true" antiResourceLocking="false" >

  <!-- 오직 사내 특정 IP(: 192.168.10.50)에서만 톰캣 관리자 페이지에 접속 허용 -->

  <RemoteAddrValve allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.10\.50" />

</Context>

코드를 사용할 때는 주의가 필요합니다.

설정 적용 후 Tomcat 재시작: sudo systemctl restart tomcat9

4. IIS (Windows Server 웹 서버)

  • 취약점 시나리오 (권한 상승 취약점): 웹 애플리케이션의 취약점을 통해 들어온 공격자가 IIS의 기본 실행 계정(IIS_IUSRS)의 권한을 악용해 시스템 최고 권한인 SYSTEM으로 상승하는 침투 기법이 주로 쓰입니다.
  • 구체적 방어법 (GUI 및 명령어 기반)
    • 디렉터리 탐색 기능 끄기: IIS 관리자 실행 -> 해당 웹사이트 선택 -> [디렉터리 탐색]더블 클릭 -> 오른쪽 작업 창에서 [사용 안 함]클릭.
    • 업로드 폴더 실행 권한 제거: IIS 관리자 -> Uploads 폴더 선택 -> [처리기 매핑]더블 클릭 -> 오른쪽 작업 창에서 [기능 권한 편집]클릭 -> '스크립트' '실행' 체크 해제. [1]

PART 3. 외부 접속 차단 기법 (MySQL, phpMyAdmin, IP 제한)

데이터베이스와 관리 도구를 외부 공격자로부터 완전히 숨기는 가장 확실한 방법입니다.

1. MySQL 외부 접속 원천 차단 및 특정 IP 허용

  • 방법 A: 로컬 호스트만 바인딩 (가장 추천)
    MySQL
    설정 파일(/etc/mysql/mysql.conf.d/mysqld.cnf)을 엽니다.

ini

# 기존 외부 오픈(0.0.0.0)을 지우고, 내부 서버 자신(127.0.0.1)만 접속할 수 있게 제한

bind-address = 127.0.0.1

코드를 사용할 때는 주의가 필요합니다.

이렇게 하면 외부 인터넷에서는 3306번 포트로 아예 접근이 불가능해집니다. 사내에서 접속할 때는 SSH 터널링(Port Forwarding)을 통해서만 들어오도록 강제합니다.

  • 방법 B: 특정 원격 IP만 데이터베이스 권한 부여 (MySQL 내부 설정)
    MySQL
    콘솔에 접속(mysql -u root -p)하여 계정별 접근 제한을 둡니다.

sql

-- 기존 임의의 모든 곳(%)에서 접속 가능하던 설정을 삭제하고

-- 오직 사내 컴퓨터 IP (: 211.234.56.78)에서만 db_user가 접속 가능하도록 계정 생성

CREATE USER 'db_user'@'211.234.56.78' IDENTIFIED BY '강력한비밀번호!!';

GRANT ALL PRIVILEGES ON my_database.* TO 'db_user'@'211.234.56.78';

FLUSH PRIVILEGES;

코드를 사용할 때는 주의가 필요합니다.

2. phpMyAdmin 특정 IP/주소에서만 접근 가능하게 설정

phpMyAdmin은 웹 브라우저로 DB를 관리하는 도구이므로 공격자의 표적이 되기 쉽습니다.

  • 방법 A: 접속 URL 주소 숨기기 (보안 기본)
    Nginx
    Apache 설정에서 phpMyAdmin의 기본 주소 경로를 무작위 문자열로 변경합니다.

bash

# 기본 경로인 /phpmyadmin 을 지우고 추측이 불가능한 주소로 변경

sudo mv /usr/share/phpmyadmin /usr/share/pma_secret_9982

코드를 사용할 때는 주의가 필요합니다.

이제 공격자가 ://xn--i89aqfo2po1p.com으로 들어오면 404 에러가 나며, 오직 관리자만 ://xn--i89aqfo2po1p.com로 접속할 수 있습니다.

  • 방법 B: Apache 환경에서 특정 IP만 접근 허용
    phpMyAdmin
    아파치 설정 파일(/etc/phpmyadmin/apache.conf)에 접근 제어를 추가합니다.

apache

<Directory /usr/share/phpmyadmin>

    Options FollowSymLinks

    DirectoryIndex index.php

 

    # 모든 접근을 차단하고, IP만 허용

    Require all denied

    Require ip 211.234.56.78

    Require ip 192.168.1.0/24

</Directory>

코드를 사용할 때는 주의가 필요합니다.

설정 후 Apache 재시작 시, 허용되지 않은 IP가 접근하면 403 Forbidden 에러를 띄웁니다.

PART 4. OS 종류별 SSH 원격 접속 보안 강화법

리눅스(Ubuntu/CentOS) Windows 환경에서 SSH 문을 걸어 잠그는 실무 명령어입니다. [1]

1. 리눅스 계열 (Ubuntu, Rocky Linux )

설정 파일(/etc/ssh/sshd_config)을 편집기로 열어 아래 항목들을 수정합니다. [1]

ini

# 1. 기본 22번 포트를 사용하지 않고 52222번 같은 임의의 높은 포트로 변경

Port 52222

 

# 2. root 계정의 원격 로그인 자체를 금지 (일반 계정으로 들어와서 switch하게 만듦)

PermitRootLogin no

 

# 3. 비밀번호 기반 로그인 차단 (Hydra 무차별 대입 공격을 완벽히 무력화)

PasswordAuthentication no

 

# 4. 미리 발급받은 SSH 공개키(Key) 기반 인증만 허용

PubkeyAuthentication yes

 

# 5. 최대 인증 시도 횟수 제한 (연속 실패 시 세션 강제 종료)

MaxAuthTries 3

코드를 사용할 때는 주의가 필요합니다.

  • 명령어 적용 및 유효성 검사:

bash

# 설정 파일 문법에 오류가 없는지 테스트

sudo sshd -t

# 이상 없다면 SSH 서비스 재시작

sudo systemctl restart ssh

코드를 사용할 때는 주의가 필요합니다.

2. Windows Server 계열 (OpenSSH 사용 기준)

Windows Server 2019 이상부터는 기본 탑재된 OpenSSH 기능을 많이 사용합니다.

  • 설정 파일 경로: C:\ProgramData\ssh\sshd_config (메모장을 관리자 권한으로 열어 수정)
  • 보안 강화 설정:

ini

Port 52222

PermitRootLogin no  # Windows에서는 Administrator 계정 원격 차단 효과

PasswordAuthentication no

PubkeyAuthentication yes

코드를 사용할 때는 주의가 필요합니다.

  • 파워셸(PowerShell) 명령어로 서비스 재시작:

powershell

Restart-Service sshd

코드를 사용할 때는 주의가 필요합니다.

  • Windows 방화벽 포트 오픈 명령어 (새 포트 적용):

powershell

New-NetFirewallRule -Name "SSH-52222" -DisplayName "Allow SSH 52222" -Enabled True -Profile Any -Direction Inbound -Action Allow -Protocol TCP -LocalPort 52222

코드를 사용할 때는 주의가 필요합니다.

 

실무 보안 아키텍처 제언

가장 완벽한 보안은 "방화벽을 통해 서비스를 외부 인터넷으로부터 격리하고, 신뢰된 대상만 통과시키는 것"입니다.

실무에서는 리눅스의 UFWiptables 명령어를 통해 아예 네트워크 수준에서 먼저 걸러내는 것이 좋습니다.

bash

# 기본적으로 들어오는 모든 접근 차단

sudo ufw default deny inbound

 

# 오직 회사 IP(211.234.56.78)에서만 52222(SSH) 포트로 들어오는 것 허용

sudo ufw allow from 211.234.56.78 to any port 52222 proto tcp

 

# 방화벽 활성화

sudo ufw enable

코드를 사용할 때는 주의가 필요합니다.

 

보안 설정은 한 군데라도 오타가 나면 관리자 본인의 접속도 끊길 위험이 있습니다.

  • 현재 테스트해보려는 시스템 환경이 리눅스(Ubuntu/CentOS)인가요, 아니면 Windows 환경인가요?
  • 위의 리눅스 SSH (Key) 생성 및 등록 방법이나, UFW 방화벽 실무 운용법 중 실습해보고 싶으신 구체적인 부분이 있다면 말씀해 주세요.

 

댓글목록

등록된 댓글이 없습니다.


사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
6
어제
10
최대
28
전체
209
Copyright © HeyWEB. All rights reserved.