Solaris 10 の設定: パスワード暗号アルゴリズムを MD5 にして強化する

Home » メモ帳 » Unix » Solaris 10 の設定: パスワード暗号アルゴリズムを MD5 にして強化する
Unix コメントはまだありません

周知の事実だが、Solaris のパスワードはデフォルトでは、「8文字」以内でしか利用できない。
これは、Solaris 10 になった現在でもデフォルトで生きている設定である。

実証検証

root のパスワードに強力な(?)20文字の「PassWord0123456789:)」を設定する。

# passwd root
New Password: ※ 20文字のパスワード「PassWord0123456789:)」を入力。
Re-enter new Password: ※ 20文字のパスワード「PassWord0123456789:)」を入力。
passwd: password successfully changed for root
# exit
exit

一般ユーザーから、20文字のパスワード「PassWord0123456789:)」を使って、root に su する。(またはログイン)

$ su -
Password: ※ 20文字のパスワード「PassWord0123456789:)」を入力。
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
# exit
exit

これはもちろんログインできる。

一般ユーザーから、先頭8文字「PassWord」を使って、root に su する。(またはログイン)

$ su -
Password: ※ 8文字だけ「PassWord」を入力。
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
#

ログイン出来ちゃうし… Σ(゚Д゚;

結論: Solaris は、ブルートフォースに激弱っ! (((( ;゚Д゚)))ガクガクブルブル

John the Ripper に解析にかけたところ、「PassWord」は、16日と4時間程で解読することができた。ヘボヘボのダメダメである。

 :
(省略)
 :
16:04:27:04 - Switching to length 8
16:04:27:04 - Expanding tables for length 8 to character count 32
16:04:27:04 - Trying length 8, fixed @1, character count 32
16:04:27:04 + Cracked root
16:04:27:04 Session completed

パスワード暗号アルゴリズムを変更して8文字以上のパスワードも利用できるようにする

とはいえ、Solaris もアホではない。デフォルトの設定を変更することで、8文字以上のパスワードを有効にすることができる。つまり、ちゃんと変更を行っていないサーバー管理者がアホなのである。

「/etc/security/crypt.conf」で、そのシステムでどのパスワード暗号アルゴリズムが利用できるかを定義している。

# cat /etc/security/crypt.conf

#
# Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident  "@(#)crypt.conf 1.1     02/06/07 SMI"
#
# The algorithm name __unix__ is reserved.

1       crypt_bsdmd5.so.1
2a      crypt_bsdbf.so.1
md5     crypt_sunmd5.so.1

「/etc/security/policy.conf」で、そのシステムがどのパスワード暗号アルゴリズムを利用するかを定義している。

# cat /etc/security/policy.conf

#
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# /etc/security/policy.conf
#
# security policy configuration for user attributes. see policy.conf(4)
#
#ident  "@(#)policy.conf        1.11    04/09/27 SMI"
#
AUTHS_GRANTED=solaris.device.cdrw
PROFS_GRANTED=Basic Solaris User

# crypt(3c) Algorithms Configuration
#
# CRYPT_ALGORITHMS_ALLOW specifies the algorithms that are allowed to
# be used for new passwords.  This is enforced only in crypt_gensalt(3c).
#
CRYPT_ALGORITHMS_ALLOW=1,2a,md5

# To deprecate use of the traditional unix algorithm, uncomment below
# and change CRYPT_DEFAULT= to another algorithm.  For example,
# CRYPT_DEFAULT=1 for BSD/Linux MD5.
#
#CRYPT_ALGORITHMS_DEPRECATE=__unix__

# The Solaris default is the traditional UNIX algorithm.  This is not
# listed in crypt.conf(4) since it is internal to libc.  The reserved
# name __unix__ is used to refer to it.
#
CRYPT_DEFAULT=__unix__
#
# These settings determine the default privileges users have.  If not set,
# the default privileges are taken from the inherited set.
# There are two different settings; PRIV_DEFAULT determines the default
# set on login; PRIV_LIMIT defines the Limit set on login.
# Individual users can have privileges assigned or taken away through
# user_attr.  Privileges can also be assigned to profiles in which case
# the users with those profiles can use those privileges through pfexec(1m).
# For maximum future compatibility, the specifications should
# always include "basic" or "all"; privileges should then be removed using
# the negation.  E.g., PRIV_LIMIT=all,!sys_linkdir takes away only the
# sys_linkdir privilege, regardless of future additional privileges.
# Similarly, PRIV_DEFAULT=basic,!file_link_any takes away only the
# file_link_any privilege from the basic privilege set; only that notation
# is immune from a future addition of currently unprivileged operations to
# the basic privilege set.
# NOTE: removing privileges from the the Limit set requires EXTREME care
# as any set-uid root program may suddenly fail because it lacks certain
# privilege(s).
#
#PRIV_DEFAULT=basic
#PRIV_LIMIT=all
#
# LOCK_AFTER_RETRIES specifies the default account locking policy for local
# user accounts (passwd(4)/shadow(4)).  The default may be overridden by
# a user's user_attr(4) "lock_after_retries" value.
# YES enables local account locking, NO disables local account locking.
# The default value is NO.
#
#LOCK_AFTER_RETRIES=NO

  1. /etc/security/policy.conf を書き換えて、パスワード暗号アルゴリズムを MD5 にして強化する。
    「CRYPT_DEFAULT」の値を”__unix__”から”1″に変更する。

    # vi /etc/security/policy.conf

    --- /etc/security/policy.conf.default
    +++ /etc/security/policy.conf
    @@ -28,7 +28,7 @@
     # listed in crypt.conf(4) since it is internal to libc.  The reserved
     # name __unix__ is used to refer to it.
     #
    -CRYPT_DEFAULT=__unix__
    +CRYPT_DEFAULT=1
     #
     # These settings determine the default privileges users have.  If not set,
     # the default privileges are taken from the inherited set.

  2. パスワードをすべて再設定する。
    これ面倒だけど最重要っ!上記設定では、まだパスワードがアホアホなままなので、新しいアルゴリズムでパスワードを再設定しなおす必要がある。設定変更で、変換されると思ったら大間違い。そんな変換ツールがあったら、パスワードは簡単に解読できてしまうわ!w
    何度も言うが、パスワードの再設定が行われない限り、新しいパスワード暗号アルゴリズムは適用されない。
    後からだとユーザー全員に通知して変更を促す必要がある。だから最初のうちに設定しておく必要がある。忘れるな!忘れても必ず再設定させれ!! (,,゚Д゚) ガンガレ!

    # passwd USER

    $ passwd
  3. 本当に8文字以上使えるかチェックしてみる。
    root のパスワードに強力な(?)20文字の「PassWord0123456789:)」を設定する。

    # passwd root
    New Password: ※ 20文字のパスワード「PassWord0123456789:)」を入力。
    Re-enter new Password: ※ 20文字のパスワード「PassWord0123456789:)」を入力。
    passwd: password successfully changed for root
    # exit
    exit

    一般ユーザーから、先頭8文字「PassWord」を使って、root に su する。(またはログイン)

    $ su -
    Password: ※ 8文字だけ「PassWord」を入力。
    su: incorrect password

    おおっ!ちゃんと拒否してる。 (゚з゚)イインデネーノ?

    一般ユーザーから、20文字のパスワード「PassWord0123456789:)」を使って、root に su する。(またはログイン)

    $ su -
    Password: ※ 20文字のパスワード「PassWord0123456789:)」を入力。
    Sun Microsystems Inc. SunOS 5.10 Generic January 2005
    #

    こっちはちゃんとログインできた。 (≧∇≦)b

パスワード暗号アルゴリズムを MD5 にする利点

セキュリティが強化されるってのは当たり前なんだが、Linux の shadow ファイルと互換性が取れる。
これで、マルチプラットフォーム環境下でもちょっとだけ楽チンでしょ? (゚Д゚ )ウマー

参考文書