GNU/Linux >> Linux の 問題 >  >> Linux

Nmapの結果を使用してLinuxシステムを強化する

システムのセキュリティは、1回限りの作業ではありません。むしろ、セキュリティに対する組織のアプローチには多くの層があります。これらのレイヤーの一部は、データセンターへの物理的セキュリティ、インフラストラクチャの定期的なパッチ適用とメンテナンス、継続的なユーザー認識教育、および問題のスキャンシステムです。この記事では、nmapの使用方法について説明します。 およびnc 適切な次のステップを決定できるように、システムをスキャンするコマンド。ここでの例では、いくつかのシステムを使用しています。スキャンを実行するシステムは、ローカルのRed Hat Enterprise Linux(RHEL)8.3コンピューター、opendemo.usersys.redhat.comです。 は、いくつかの開いているポートがあり、さまざまなターゲットシステムがあるために使用されているRed HatSatellite6.8システムです。

[次のこともお勧めします:Sysadminセキュリティ:8つのLinuxロックダウンコントロール]

基本スキャン

Satelliteサーバーで使用されているポートを確認するには、サーバーにSSHで接続してから、netstatを使用します。 :

[root@opendemo ~]# netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1443/mongod        
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      1197/redis-server 1
tcp        0      0 0.0.0.0:5646            0.0.0.0:*               LISTEN      1132/qdrouterd     
tcp        0      0 127.0.0.1:8751          0.0.0.0:*               LISTEN      1194/python        
tcp        0      0 0.0.0.0:5647            0.0.0.0:*               LISTEN      1132/qdrouterd     
tcp        0      0 127.0.0.1:19090         0.0.0.0:*               LISTEN      1237/cockpit-ws    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1175/sshd          
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1242/postmaster    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1396/master        
tcp        0      0 0.0.0.0:9090            0.0.0.0:*               LISTEN      1138/ruby          
tcp        0      0 127.0.0.1:45285         0.0.0.0:*               LISTEN      28650/Passenger Rack
tcp        0      0 127.0.0.1:5671          0.0.0.0:*               LISTEN      1140/qpidd         
tcp        0      0 0.0.0.0:8008            0.0.0.0:*               LISTEN      1240/ruby          
tcp        0      0 127.0.0.1:5672          0.0.0.0:*               LISTEN      1140/qpidd         
tcp6       0      0 :::8140                 :::*                    LISTEN      2101/java          
tcp6       0      0 127.0.0.1:61613         :::*                    LISTEN      1135/java          
tcp6       0      0 :::5646                 :::*                    LISTEN      1132/qdrouterd     
tcp6       0      0 :::5647                 :::*                    LISTEN      1132/qdrouterd     
tcp6       0      0 :::80                   :::*                    LISTEN      1131/httpd         
tcp6       0      0 :::22                   :::*                    LISTEN      1175/sshd          
tcp6       0      0 ::1:5432                :::*                    LISTEN      1242/postmaster    
tcp6       0      0 :::3128                 :::*                    LISTEN      1258/(squid-1)     
tcp6       0      0 ::1:25                  :::*                    LISTEN      1396/master        
tcp6       0      0 127.0.0.1:8443          :::*                    LISTEN      1135/java          
tcp6       0      0 :::443                  :::*                    LISTEN      1131/httpd         
tcp6       0      0 :::9090                 :::*                    LISTEN      1138/ruby          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1135/java          
tcp6       0      0 ::1:5671                :::*                    LISTEN      1140/qpidd         
tcp6       0      0 :::8008                 :::*                    LISTEN      1240/ruby          
tcp6       0      0 ::1:5672                :::*                    LISTEN      1140/qpidd         
tcp6       0      0 :::5000                 :::*                    LISTEN      1131/httpd         
[root@opendemo ~]#

ただし、それらの一部はローカルホスト、127.0.0.1に制限されています。どのポートが公開されているかを確認するには、まずデフォルトのnmapを使用します ローカルシステムからスキャンする:

[pgervase@pgervase ~]$ nmap opendemo.usersys.redhat.com
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-07 20:28 EST
Nmap scan report for opendemo.usersys.redhat.com (10.19.47.240)
Host is up (0.041s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
3128/tcp open  squid-http
5000/tcp open  upnp
8008/tcp open  http
9090/tcp open  zeus-admin

Nmap done: 1 IP address (1 host up) scanned in 3.81 seconds
[pgervase@pgervase ~]$

この出力は、ローカルシステムがサーバーにSSH接続されたときに表示されるよりも少ないパブリックポートを表示できることを示しています。これらの非公開ポートの一部は25であり、マスターによって使用されます。 、および8005、8140、8443、および61613。これらは javaによって使用されます。 。 psを見る マスターのPIDの出力とgrep そのnetstatから 出力、マスター 後置です メーラー:

[root@opendemo ~]# ps auxww | grep 1396
root      1396  0.0  0.0  89740  2188 ?        Ss   Jan05   0:00 /usr/libexec/postfix/master -w
root     29665  0.0  0.0 112816   968 pts/0    R+   20:32   0:00 grep --color=auto 1396
[root@opendemo ~]#

その(マスター)はローカルで実行されているため、メールは内部アドレスに送信されますが、受信メールはリッスンされません。また、他のホストにも何も送信されません。

言及された他のポートはjava用でした 。 netstatを見ると 出力、2つの異なる java プロセスはこれらのポートを担当します:

[root@opendemo ~]# netstat -tlpn | grep java
tcp6       0      0 :::8140                 :::*                    LISTEN      2101/java          
tcp6       0      0 127.0.0.1:61613         :::*                    LISTEN      1135/java          
tcp6       0      0 127.0.0.1:8443          :::*                    LISTEN      1135/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1135/java          
[root@opendemo ~]#

psを見ると PID 1135の出力、 tomcatによって使用されます :

[root@opendemo ~]# ps auxww | grep 1135
tomcat    1135  0.3  3.5 12409252 2165668 ?    Ssl  Jan05   9:25 /usr/lib/jvm/jre/bin/java -Xms1024m -Xmx4096m -Djava.security.auth.login.config=/usr/share/tomcat/conf/login.config -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
root     31507  0.0  0.0 112816   968 pts/0    S+   20:53   0:00 grep --color=auto 1135
[root@opendemo ~]#

/usr/share/tomcat/conf/server.xmlを見ると ファイルには、次のようなコンテンツが含まれています:

<Server port="8005" shutdown="SHUTDOWN">
...
    <Connector port="8443"
               address="localhost"
               protocol="HTTP/1.1"
               SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="want"
               sslProtocols="TLSv1.2"
               sslEnabledProtocols="TLSv1.2"
....

これは、使用されるポートが構成ファイルでどのように定義されているかを示しています。

他のjavaを見ると 私が言及したプロセス、ポート8140のPID 2101、これは puppetによって使用されていることがわかります :

[root@opendemo ~]# ps auxww | grep 2101
puppet    2101  0.2  2.5 9787492 1545188 ?     Sl   Jan05   7:14 /usr/bin/java -Xms2G -Xmx2G -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger -XX:OnOutOfMemoryError="kill -9 %p" -XX:ErrorFile=/var/log/puppetlabs/puppetserver/puppetserver_err_pid%p.log -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar:/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/facter.jar:/opt/puppetlabs/server/data/puppetserver/jars/* clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d --bootstrap-config /etc/puppetlabs/puppetserver/services.d/,/opt/puppetlabs/server/apps/puppetserver/config/services.d/ --restart-file /opt/puppetlabs/server/data/puppetserver/restartcounter
root     31696  0.0  0.0 112816   968 pts/0    S+   20:55   0:00 grep --color=auto 2101
[root@opendemo ~]#

netstatに基づく 出力、ポート8140は一般に公開されているはずですが、nmap 私のローカルシステムからは、その結果でそれを報告しませんでした。ここでも、netstatです。 サテライトサーバーからの出力:

[root@opendemo ~]# netstat -tunap| grep 8140
tcp6       0      0 :::8140                 :::*                    LISTEN      2101/java          
[root@opendemo ~]#

およびnmap ローカルサーバーから:

[pgervase@pgervase ~]$ nmap opendemo.usersys.redhat.com | grep 8140
[pgervase@pgervase ~]$

ただし、nmapを強制することはできます 特定のポートまたはポートの範囲を確認するには:

[pgervase@pgervase ~]$ nmap -p 8140 opendemo.usersys.redhat.com
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-07 21:07 EST
Nmap scan report for opendemo.usersys.redhat.com (10.19.47.240)
Host is up (0.039s latency).

PORT     STATE SERVICE
8140/tcp open  puppet

Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds
[pgervase@pgervase ~]$ nmap -p 8000-9000 opendemo.usersys.redhat.com
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-07 21:07 EST
Nmap scan report for opendemo.usersys.redhat.com (10.19.47.240)
Host is up (0.040s latency).
Not shown: 999 closed ports
PORT     STATE SERVICE
8008/tcp open  http
8140/tcp open  puppet

Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds
[pgervase@pgervase ~]$

nmapを強制する これらのポートを確認するために、基本的なnmapである:8140ポートを確認できました。 スキャンは報告しませんでした。これは、デフォルトのnmapであることを示しています 余分な引数なしでスキャンすることは、システムを最初に見るには十分かもしれませんが、実際に開いているポートを見逃す可能性があります。

この情報は、システム管理者が潜在的な脆弱性を特定できるように、セキュリティテストで重要です。 nmapから 出力スキャン、私のシステムでローカルに実行、あなたは公に開いているポートを見ました。以前のバージョンのSatelliteにはtomcatがありました これらのポートの一部が不要なときにパブリックになるように構成されています。その問題に関する議論の一部を読むために、これが解決されたBugzillaを読むことができます。

証明書を確認する

nmapという別の問題 役立つのは、これらのさまざまなポートで使用されている証明書を確認することです。 nmapを使用する 、開いているポートを見ました。これらのポートを使用すると、OpenSSLを使用してポートで使用されている証明書を確認できます。それらのポートの多くは、自己署名証明書を使用しています。 nmapを使用するには OpenSSLを一緒に使用してリモートシステムのポートを確認するには、次のようにします。

$ for port in `nmap -p 1-5000 opendemo.usersys.redhat.com | grep " open " | cut -d "/" -f 1`
> do echo checking on port: $port
> echo | openssl s_client -showcerts -connect opendemo.usersys.redhat.com:$port
> done &> opendemo.certs.txt.`date +%Y%m%d`

私のopendemo.certs.txt.20210127 ファイルの場合、次のようなコンテンツが含まれます:

checking on port: 443
depth=1 C = US, ST = North Carolina, L = Raleigh, O = Katello, OU = SomeOrgUnit, CN = opendemo.usersys.redhat.com
verify return:1
depth=0 C = US, ST = North Carolina, O = Katello, OU = SomeOrgUnit, CN = opendemo.usersys.redhat.com
verify return:1
CONNECTED(00000003)
….
SSL handshake has read 3476 bytes and written 463 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported

その出力ファイルを使用して、使用中の証明書が正しいTLSバージョンであることを確認します。

ncを使用する場合 (またはncat )、ウェブUIに表示されるよりも多くの情報が表示される場合があります。この例では、ncを使用しました Webサーバーに接続するには:

$ nc 10.19.47.242 80
asdf
HTTP/1.1 400 Bad Request
Date: Sat, 09 Jan 2021 01:25:40 GMT
Server: Apache/2.4.37 (Red Hat Enterprise Linux)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

その出力から、インストールされたApacheのバージョンを確認できます。その情報を使用して、攻撃者はサーバーが脆弱なエクスプロイトを知ることができます。このため、Webサーバーは表示される情報の量を制限する必要があります:

[pgervase@pgervase ~]$ nc opendemo.usersys.redhat.com 443
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Fri, 08 Jan 2021 02:33:08 GMT
Server: Apache
Content-Length: 362
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
 Instead use the HTTPS scheme to access this URL, please.<br />
</p>
</body></html>

[pgervase@pgervase ~]$

この出力には、Apacheのバージョン情報がないことに注意してください。

この次の例では、ncを使用します クライアントシステムのポート21に接続するには、開いていることがわかります:

[pgervase@pgervase ~]$ nmap 10.19.47.242
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-08 21:02 EST
Nmap scan report for 10.19.47.242
Host is up (0.039s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 0.83 seconds
[pgervase@pgervase ~]$ nc 10.19.47.242 21
220 (vsFTPd 3.0.3)

その3.0.3バージョンは、システムにSSHで接続し、rpmを使用すると確認されます。 コマンド:

[root@vulnerable ~]# rpm -q vsftpd
vsftpd-3.0.3-32.el8.x86_64
[root@vulnerable ~]# rpm -qi vsftpd
Name        : vsftpd
Version     : 3.0.3
Release     : 32.el8
<snipped>

繰り返しになりますが、デバイスでApacheバージョンを学習する場合と同様に、環境内で偵察を実行して、潜在的な攻撃者がシステムについて何を学習できるかを知ることが重要です。

カリからのスキャン

次のセクションでは、Kaliサーバーからシステムをスキャンした結果をいくつか示します。この例では、ターゲットサーバーにdistccdがあることがわかっています。 ポート3632で実行されていますが、以前と同様に、nmap デフォルトではそのポートを検出しないため、具体的に確認する必要がありました:

これで、distccdがわかりました。 が開いている場合は、nmapの組み込み機能を使用して、悪用される可能性のある場所を特定できます。

プレーンなnmapのみを使用した場合 スキャンすると、その悪用可能な脆弱性を見逃していたでしょう。私の例では、uname -aを実行しました リモートシステム上で、しかし私はどんなコマンドでも実行できたでしょう。

識別サービス

nmapを使用する最後の方法 -sVを使用します オプション。開いているポートをプローブし、サービスまたはバージョン情報を判別します。この例では、Apacheが実行されているポートを80から90に変更してから、サービスを再起動しました。以下に、プレーンなnmapの違いを示します。 スキャンしてから-sVを使用します オプション。サービスをhttpdとして正しく決定しました。 dnsixではなく :

[root@pgervase ~]# nmap 10.19.47.242

Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-09 19:57 EST
Nmap scan report for 10.19.47.242
Host is up (0.043s latency).

Not shown: 996 closed ports

PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
90/tcp  open  dnsix
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 1.80 seconds

[root@pgervase ~]# nmap -sV 10.19.47.242
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-09 19:52 EST
Nmap scan report for 10.19.47.242
Host is up (0.040s latency).

Not shown: 996 closed ports

PORT    STATE SERVICE VERSION
21/tcp  open  ftp     vsftpd 3.0.3
22/tcp  open  ssh     OpenSSH 8.0 (protocol 2.0)
90/tcp  open  http    Apache httpd 2.4.37 ((Red Hat Enterprise Linux))
111/tcp open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Unix

[セキュリティについてもっと知りたいですか? ITセキュリティとコンプライアンスのチェックリストを確認してください。 ]

まとめ

システムで実行されているものの詳細なレポートを取得できるようになったので、次に何をしますか?まず、予期しないポートが開いていないことを確認します。このためには、アプリケーションチーム、セキュリティチーム、および同僚に確認してください。次は、公開されたサービスが適切に保護されていることを確認することです。これは、すべてのソフトウェアが更新されていること、更新された暗号がサポートされていること、安全でないプロトコルが使用されていないこと、サービスのデフォルトのパスワードが変更されていることを確認するなどの措置を講じることを意味します。

この記事は、サーバーの調査の概要です。 ncを使用する およびnmap 開いているポートを確認し、psを使用します これらのポートを使用してプロセスをトレースバックするコマンド。 nmapの使用方法の例も示しました。 --scriptを使用 システムをテストするための引数。この学習パスを継続するための次のステップの1つは、nmapを使用して調査することです。 /usr/share/nmap/scripts/にあるデフォルトのスクリプトを調査することで攻撃エンジンとして 。


Linux
  1. ProcDumpを使用してLinuxをデバッグする

  2. KaliLinuxでのNmapの概要

  3. Linuxでのripgrep(rg)コマンドの使用

  1. Linuxパッケージ管理のためのAppImageの使用

  2. Linuxでサービスを有効にする

  3. Linux Deploy を使用した Android 上の Kali Linux

  1. 13Linuxセキュリティチュートリアル

  2. 50 UNIX / Linux システム管理者チュートリアル

  3. Linux での dmsetup コマンドの使用例