セキュリティ

セキュリティといっても広義に考えると大変なので、とりあえず、iptablesを中心に書き留めます。今後、IDSやsnortについても取り上げていきたい。

iptables

とりあえず読んでおく。あなたのLinuxマシンをセキュアにするために知っておくべきiptablesのルール10選
ではまず今の設定をみてみましょう。

iptables --list

みんなpolicy ACCEPTになってます。なにもしてないから当然です。ただインストール時に設定していれば、結果は違うかもしれないです。その中に3つの単語が出てます。INPUT,OUTPUT,FORWARDです。この3つについて(チェイン)設定を行います。

  • INPUT 入ってくるデータに対して設定する。
  • OUTPUT 出ていくデータに対して設定する。
  • FORWARD 転送するデータに対して設定する。 まず設定をする前にリモートで設定している場合は、注意してください。設定によってはつながらなくなってしまいます。ですので、atコマンドで設定中はとめるようにしておきます。
    at 14:00
    at>/etc/init.d/iptables stop
    at><Ctrl>+Dを入力
    at -l
    またルールを追加していきますが、この順序には意味があるので気をつけてください。つまり最初にルールに一致してしまえばその下のルールは適応されないからです。 とりあえず、1枚しかカードささっていないので、FORWARDはとめておきます。
    iptables --flush
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -P FORWARD DROP
    echo 1で有効です。--flushで初期化します。ついでにほかのチェインもポリシーはデフォルトはDROP(受け付けない)にしておきます。-Pとはデフォルトチェインルールの設定です。
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    自分はなんでもOKということで、
    iptables -A INPUT  -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    ここでloはローカルインターフェイスです。ほかにeth0,eth1とか指定でしきます。-iはインプットインターフェース、-oはアプトプットインターフェースです。-jはルールの指定です。ここではACCEPTを指定していますので、通過させることになります。では最初の-Aはなにかというとこれは、ルールをチェインの終わりに追加するということです。
    iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
    iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
    これは192.168.1.0/24からはすべてを許可するということです。 -sは送信元アドレスをさします。-dは宛先IPアドレスです。
    iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
    iptables -A INPUT  -p udp --sport 53 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --dport 53 -j ACCEPT
    これで、upd53のポートが開いたことになります。--dportは宛先ポートです。--sportは発信ポートです。-mはモジュールをロードします。(limit,state)stateは接続状態を知ることができます。NEW、INVALID、ESTABLISHED、RELATEDがあり、NEWは新規接続、INVALIDは既存パケットと関係のないパケット、ESTABLISHEDは既存パケットと関係あるパケット、RELATEDは新規接続のパケットだが、既存パケットに関係のあるパケットになります。limitは単位時間当たりにマッチする最大値を設定できます。あとは、NTPで123を使い、mfeedを使わせてもらっているので、それを許可(/etc/ntp.conf)とついでに20,21,22,25,80,110,443も許可します。またLOGでログをとっておきます。ログは/var/log/messageに保存されます。
    iptables -A INPUT -s 210.173.160.27 -p udp --dport 123 --sport 123 -j ACCEPT
    iptables -A INPUT -s 210.173.160.57 -p udp --dport 123 --sport 123 -j ACCEPT
    iptables -A INPUT -s 210.173.160.87 -p udp --dport 123 --sport 123 -j ACCEPT
    iptables -A OUTPUT -d 210.173.160.27 -p udp --dport 123 --sport 123 -j ACCEPT
    iptables -A OUTPUT -d 210.173.160.57 -p udp --dport 123 --sport 123 -j ACCEPT
    iptables -A OUTPUT -d 210.173.160.87 -p udp --dport 123 --sport 123 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW --dport 20 -j LOG --log-prefix 'IPTABLES-IN_20:'
    iptables -A INPUT -p tcp -m state --state NEW --dport 21 -j LOG --log-prefix 'IPTABLES-IN_21:'
    iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j LOG --log-prefix 'IPTABLES-IN_22:'
    iptables -A INPUT -p tcp -m state --state NEW --dport 25 -j LOG --log-prefix 'IPTABLES-IN_25:'
    iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j LOG --log-prefix 'IPTABLES-IN_80:'
    iptables -A INPUT -p tcp -m state --state NEW --dport 110 -j LOG --log-prefix 'IPTABLES-IN_110:'
    iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j LOG --log-prefix 'IPTABLES-IN_443:'
    iptables -A INPUT -p tcp -m state --state NEW --dport 20 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW --dport 110 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --sport 20 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --sport 21 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --sport 22 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --sport 25 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --sport 80 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --sport 110 -j ACCEPT
    iptables -A OUTPUT -p tcp -m state --state NEW --sport 443 -j ACCEPT
    ここでSMTP-AUTHを使っている場合は、465、POPをSSL対応している場合は995も許可しておいてください。SubmissionPort?の場合は、587です。ではstateがNEWのものは許可しましたが、セッション確立後のパケットは許可しておきますので、
    iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    としました。
    iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
    これはメールの受信を早くするために、IDENTはDROPではなくREJECTして、TCP RESETパケットを返信します。
    http://www.toyo.co.jp/security/ids/support/faqj/contents/qj00118.html
    http://www.asahi-net.or.jp/~mu6k-ski/security/ident.html
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

これはSYN Floodアタックを防ぐためのもので、送信元を偽装し、SYNビットを立てたTCPパケットを連続しておくってきます。1秒間に5個以上のsynパケットを受信した場合にあらゆる接続を拒否する設定になります。 --synはSYNビットが設定され ACK と RST ビットがクリアされているTCPパケットにのみマッチし、TCP 接続の開始要求に使われます。

最後に/etc/init.d/iptables saveでセーブしておきます。これで、/etc/sysconfig/iptablesに保存されてます。さてだらだらと書いてますが、/etc/init.d/iptablesをみていると、ロードしたいモジュールは

IPTABLES=iptables
IPTABLES_DATA=/etc/sysconfig/$IPTABLES
IPTABLES_CONFIG=/etc/sysconfig/${IPTABLES}-config

とありますので、ここに記述しておきましょう。最初は、*filterで最後はCOMMITでしめくくっておきます。chkconfigで有効にしておきましょう。 これで一応動いてはいるんですが、pingを打つとOperation not permittedとなっちゃったので、

iptables -A INPUT -d 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -s 192.168.1.1 -j ACCEPT

これはINPUTで-d,OUTPUTで-sにしてます。 またあきらかに怪しいIPの制限の場合の例は、

iptables -A OUTPUT -p tcp -s 攻撃元IP -d サーバIP --dport 80

DoSの対策(SYN Flood)として、SYN Cookieを利用します。シーケンス番号にランダム値を使用していたものについて、クライアントのIPの情報から算出した値を使用します。これによりハーフオープン状態を作らずに正常時に接続情報がメモリに保持されるため、リソース不足に陥ることを防ぎます。では

echo 1 >/proc/sys/net/ipv4/tcp_syncookies

また/etc/sysctl.confに

net.ipv4.tcp_syncookies=1

を追加します。 またBroadcastのpingに応答したくない場合は、

echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

また解析してくれるIPTables log analyzerというものがあります。http://www.gege.org/iptables/
http://fedorasrv.com/iptables_log_analyzer.shtml ではhttp://scan.sygate.com/からチェックしてみましょう。Quickscanをクリックしてチェックです。

http://nmag.jp/modules/xf4section/article.php?articleid=7に大変役に立つスクリプトがありますので、参考にしましょう。

リンク

Firewall
習うより慣れろ! iptablesテンプレート集
iptables の ipt_recent で ssh の brute force attack 対策
ファイアウォール構築(iptables)
― 世界の国別 IPv4 アドレス割り当てリスト ―

issue

telnetでログインしたとき出てくるメッセージを変更しておきます。/etc/issue.netのファイルの中身を編集します。これはリモート経由の場合で、ローカルの場合は、/etc/isuueです。そもそもメッセージの出力を禁止したい場合は、in.telnetを-hで起動します。/etc/xinetd.d/telnetにserver-args=-hを追加します。

securetty

/etc/securettyに記述された端末はrootでログイン可能です。ttyp0~ttyp2がtelnet端末です。ですので、これは消しておきましょう。また/etc/pam.d/loginを覗いてください。そのかなかに

auth       required     pam_securetty.so

の記述があることを確認しておきましょう。

ROOTになれるユーザ

suでrootになれるユーザは制限しておくべきです。PAMを使用するのですが、/etc/pam.d/suを編集します。するとgroupのtestでないユーザはsuでrootになれません。

auth       required     /lib/security/$ISA/pam_wheel.so use_uid group=test

パスワードが安全か調べるには

John

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/244johnripper.html

記録

ユーザのコマンド等の記録をする場合には、acctonを実行しておくのですが、私の環境では、/etc/init.d/psacctがありましたので、

chkconfig --level 345 psacct on

で起動しています。また/var/account/pacctに情報が書き込まれてます。psacctでACCTFILE=/var/account/pacctとなってるからです。 まずacで接続時間がわかります。また

ac -p

でユーザ毎の接続時間がわかります。

lastcomm ユーザ名

でそのユーザが使用したコマンドの一覧がわかります。

sa

でコマンドの実行回数や、CPUの時間がわかり、

sa -u

でユーザ毎に集計されます。

LSAT

LSAT(inux Security Auditing Tool)セキュリティ全般をチェックしてくれるツールです。http://usat.sourceforge.net/からダウンロードしました。

wget http://usat.sourceforge.net/code/lsat-0.9.2.tgz
cd lsat-0.9.2
./configure
make 
make insatll

では実行しましょう

lsat

終わりましたら、lsat.outに結果が出力されてます。 Running checkdotfiles module...とRunning checkmd5 module...に大変時間がかかってたので、心配になってCtrl-Cで終了しました...

http://kazn.dip.jp/xoops/xfsection+article.articleid+26.htm

WHCC

Web Hack Control Center(WHCC)でWeb Server Vulnerability(脆弱性) scannerです。 http://www.ussysadmin.com/modules.php?name=Downloads&d_op=search&query=whccからダウンロードしました。

http://scanedge.net/docs/whcc.html

rkHunter

http://www.kozupon.com/security/rkhunter.html

chkrootkit

http://kajuhome.com/chkrootkit.shtml

Tripwire

wget ftp://ftp.pbone.net/mirror/ftp.silfreed.net/repo/rhel/4/i386/silfreednet/RPMS/tripwire-2.3.1-22.el4.i386.rpm
rpm -ivh tripwire-2.3.1-22.el4.i386.rpm

もしくは、http://sourceforge.net/project/showfiles.php?group_id=3130&package_id=3042&release_id=488984より

wget http://downloads.sourceforge.net/tripwire/tripwire-2.4.1.2-src.tar.bz2?modtime=1176898244&big_mirror=0
bunzip2 tripwire-2.4.1.2-src.tar.bz2
tar xf tripwire-2.4.1.2-src.tar
cd tripwire-2.4.1.2-src

細かい設定がしたい場合は、install/install.cfgを編集します。

./configure
make
make install

デフォルトでは

TWBIN: /usr/local/sbin
TWMAN: /usr/local/man
TWPOLICY: /usr/local/etc
TWREPORT: /usr/local/lib/tripwire/report
TWDB: /usr/local/lib/tripwire
TWSITEKEYDIR: /usr/local/etc
TWLOCALKEYDIR: /usr/local/etc

となってました。 rpmの場合インストールが終わってから、

tripwire-setup-keyfiles

すると

Enter the site keyfile passphrase: サイトのパスフレーズ ・・・1
Verify the site keyfile passphrase: 上と同じもの
Enter the local keyfile passphrase: ローカルのパスフレーズ
Verify the local keyfile passphrase: 上と同じもの
Please enter your site passphrase:  1で入力したもの 2回聞かれる

終了しましたら、/etc/tripwire/twcfg.txtを編集しましょう。(/usr/local/etc/twcfg.txt ソースから入れた場合)

MAILNOVIOLATIONS = false エラーが無いときにメールを送信させない。
EMAILREPORTLEVEL = 4    0~4
REPORTLEVEL = 4            0~4
MAILPROGRAM = /var/qmail/bin/qmail-inject  qmailを使っている場合

では保存後暗号化をします。

twadmin --create-cfgfile -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt

サイトのパスフレーズを聞かれますので、上記で設定した値を入力します。また戻す場合は、

twadmin --print-cfgfile > /etc/tripwire/twcfg.txt

では初期化です。

tripwire --init

画面に

Warning: File system error.
Filename: ファイル名

とか出てきている場合は、 /etc/tripwire/twpol.txtを開いて該当ファイルをコメントアウトしておきましょう。またメールの送信先ですが、

# Tripwire Binaries
(
 rulename = "Tripwire Binaries",
 severity = $(SIG_HI)

とある部分の上に

( emailto = hoge@hoge.com )
{

を追加し、

{
/bin        -&gt; $(SEC_BIN) ;
/lib        -&gt; $(SEC_BIN) ;
}

とある部分の下に

}

を追加します。ではポリシーファイルを再作成して、初期化します。

twadmin --create-polfile /etc/tripwire/twpol.txt
tripwire --init

エラーが無くなればOKです。ではチェックしてみましょう。

tripwire --check

メールのテストもやっておきましょう。

tripwire --test --email hoge@hoge.com

http://centos.oss.sc/security/tripwire/ http://kajuhome.com/tripwire.shtml
http://www.asahi-net.or.jp/~wv7y-kmr/memo/tripwire.html
http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec11/unix_sec02.html

SQL Injection

SQL Injectionツール

etc

リンク

http://www.linux.or.jp/JM/html/iptables/man8/iptables.8.html
http://www.net-365.com/saba/iptables.html
http://naokuni.fc2web.com/study/router/iptables/
http://gapo.zive.net/iptables/right.html
http://www.geocities.co.jp/SiliconValley-Oakland/5924/win2000/ethereal/index.html
http://www.tsym.net/linux/iptables.htm
http://www.stackasterisk.jp/tech/program/spoofing02_01.jsp
http://www.dream-seed.com/pukiwiki/index.php?Linux%2Fiptables%A4%C7%A5%EB%A1%BC%A5%BF%A4%F2%BA%EE%A4%EB
http://itnavi.net/securityscan.html
情報処理推進機構
@police
http://www.atmarkit.co.jp/fsecurity/rensai/iprotect01/iprotect01.html
http://www.kozupon.com/crack/crack1.html
crack1から5ぐらいまであります。よく読んでおきましょう
Webアプリケーションを作る前に知るべき10の脆弱性

参考書籍


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-12 (木) 18:15:00 (2226d)