移动安全 安全管理 应用案例 网络威胁系统安全 应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 系统安全 >

系统安然借助OTPW建设一次性暗码验证

时间:2013-05-04 10:19来源:TuZhiJiaMi企业信息安全专家 点击:
暗码验证触及安然和信赖方面的良多假定。颠末加密的SSH地道和公开密钥验证则是确保暗码在传输过程中不遭到危及的两种常常利用编制。不外如果你今朝所利用的这台计较机不成信赖,那该
Tags系统安全(735)OTPW配置(1)密码验证(1)  

  暗码验证触及安然和信赖方面的良多假定。颠末加密的SSH地道和公开密钥验证则是确保暗码在传输过程中不遭到危及的两种常常利用编制。不外如果你今朝所利用的这台计较机不成信赖,那该若何是好?

  这尽非谨慎谨严的人担忧的一种易受报复打击的场景。在良多泛泛环境和常见处所,你可能不该利用系统暗码,哪怕是经由过程一条安然地道。例子包含以下:

  ◆酒店、藏书楼或网吧里面的公总计较机;

  ◆同事被传染了病毒的计较机;

  ◆结对编程时所利用的共享工作站;

  ◆他人有可能看到你键进暗码全部过程的任何处所。

  上述这些例子有何共同的地方呢?共同的地方就是,实际上,你试图从一个不成信赖的来历连接至可托任的目标地。这完全有悖于设计大年夜大都验证系统的初志。

  就拿公开密钥验证来讲。SSH公开密钥验证无疑绕过了长途主机上的暗码提示,可是它仍需要你把你的私有密钥暗码交给本地机械。别的,一旦密钥用你的暗码来解密,本地系统便可以完全拜候里面的敏感密钥内容。

  好在,已有一种编制可以解决这个常常被人忽视的标题问题:那就是一次性暗码。

  SSH和一次性暗码这对组合具有强大年夜的功能:

  ◆SSH和谈供给了跨全部收集对登录挨次进行加密的机制。

  ◆杰出的SSH客户端让你可以在输进登录资料之前,先查抄长途主机的公开密钥指纹。这可以避免未授权主机汇集你的一次性暗码。

  ◆一次性暗码系统确保了暗码没法被反复利用。所以,就算某个暗码在传输过程中被获得,一旦你用该暗码登录上往,这个暗码对报复打击者来讲也是毫无价值的。

  近似UNIX的系统有良多一次性暗码解决方案。两种最驰名的解决方案是S/KEY和OPIE(每件工作的一次性暗码)。

  因为OPIE比来从Debian和Ubuntu储存库中移除后,由德国计较机科学家Markus Kuhn开辟的OTPW一次性暗码系统供给了一种切实可行的替代方案。当然OTPW并不是直代替代OPIE,但它供给了同类功能,同时供给了S/KEY或OPIE所没有的一些令人存眷的特点。

  从Debian和Ubuntu储存库移除OPIE

  Debian在2011年年初开端移除与OPIE有关的法度包,启事是二进制法度的安然性、许可标题问题和贫乏上游勾当等方面引发了一番会商。

  假定你有欢愉爱好想体味具体细节,可以参阅以下相干的Debian弊端陈述:

  ◆http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=511582

  ◆http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=622220

  ◆http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=622221

  ◆http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=622246

  当然截至截稿时,OPIE法度包仍然在今朝的Debian不变版本(代号为"Squeeze")中,Debian端口(debports)储存库里面也有一些非正式的平大驾口,但OPIE并未呈此刻测试版或非不变版中,它也仿佛不太可能添加到下一个隐私版本中。

  特别是,OTPW供给了以下功能:

  ◆双因子验证,由"前缀暗码"和一组主动生成的、一次性的后缀构成。就算后缀列表落到了坏人的手里,如果没有前缀暗码,那也少不了蛮力报复打击。

  ◆经由过程利用暗码锁和三重质询(triplet challenge),防备某些竞争前提和中间人报复打击。

  ◆撑持共享式文件系统。因为OTPW对比存储在用户主目次里面的散列值列表来查抄暗码,所以一次性暗码列表合用于挂载统一$HOME目次的所有系统。

  接下来将介绍OTPW的安装和利用,并出格侧重介绍与OpenSSH的集成。

  法度包安装

  想利用OTPW,你就需要两个二进制法度:otpw-bin和libpam-otpw。就Debian和Ubuntu而言,安装很等闲,只要履行这个号令:

  sudo apt-get install otpw-bin libpam-otpw

  假定你的发行版其实不供给OTPW,可以直接从开辟者的主页下载源代码。源打包文件其实不利用GNU主动建设(autoconf)东西,所以你需要遵循开辟者的把持申明,手动编译和安装二进制法度。

  建设可插拔验证模块(PAM)

  让系统为OTPW作好预备的下一步是,建设libpam-otpw。周全措置PAM不在本文的切磋范围以内,但我仍是会在这里介绍几种最多见的利用处合。

  改动PAM建设会你让没法利用你的工作站或办事器,所以一个好主张就是,让你现有的终端保持开放状况,直到你确信一切都正常工作。假定你可以拜候节制台,手边要备一份可启动的发行版或解救盘。想体味经由过程SSH测试PAM方面的更多信息,请参阅《借助SSH,测试一次性暗码验证》这篇附文。

  借助SSH,测试一次性暗码验证

  假定你在为OTPW建设一个长途系统,应当在不封锁今朝SSH连接的环境下测试PAM仓库。切记:假定你在PAM建设上呈现了弊端,即便有权拜候节制台,也可能没法验证--所以手边要备一份可启动的发行版,好比Knoppix、SystemRescueCD或Finnix,以防万一。与此同时,现有的登录仍然不遭到影响,因为它们已经由过程了验证。

  为了准确测试PAM仓库,你不克不及从头利用现有的SSH连接。大年夜大都最新的发行版在默许环境下都撑持SSH多路复用和持久性连接,所以要明白禁用这些选项以便测试。

  别的,SSH在默许环境下偏疼公开密钥验证。所以,为了测试OTPW验证,公开密钥验证一样需要姑且禁用。

  下面这个调用可以或许准确测试SSH PAM仓库,不需要对系统做任何改动:

  read -p 'Hostname: ' REMOTE_HOST &&

  SSH_AGENT_PID= SSH_AUTH_SOCK= \

  ssh \

  -o PreferredAuthentications=keyboard-interactive \

  -o ControlPersist=no \

  -o ControlPath=none \

  "$REMOTE_HOST"

  一旦你确信OTPW在正常工作,还应当验证你的其他验证机制(即SSH公开密钥和泛泛的系统暗码)继续正常工作。

  启用OTPW的最等闲编制就是把它直接放在common-auth建设文件中pam_unix的前面:

  # /etc/pam.d/common-auth

  auth sufficient pam_otpw.so

  session optional pam_otpw.so

  auth sufficient pam_unix.so nullok_secure

  auth required pam_deny.so

  PAM库的挨次很是首要。假定把OTPW放在第一名,具有~/.otpw文件的用户会起首获得一次性暗码的提示,如果OTPW登录掉败,承诺退回到尺度的系统暗码。没有~/.otpw文件的用户只会看到尺度的暗码提示。

  假定你更喜好挨次倒过来,在退回到一次性暗码之前提示系统暗码,只要确保pam_deny放在最后一名:

  # /etc/pam.d/common-auth

  auth sufficient pam_unix.so nullok_secure

  auth sufficient pam_otpw.so

  session optional pam_otpw.so

  auth required pam_deny.so

  假定你不由得想完全移除尺度的系统暗码,特别是节制台登录时所用的系统暗码,千万别这么做。在一些系统上,特别是在具有ecryptfs-encrypted主目次的Ubuntu系统上,如果没有尺度的系统暗码,想从OTPW故障恢复过来极其坚苦。

  改动common-auth凡是是在无外设办事器或只有节制台的系统上要做的准确把持。不外,供给X Window System的工作站或办事器给一次性暗码系统带来了特别的标题问题。

  一些东西或利用法度没法与OTPW顺利协同运行,启事是它们没法把质询显示给用户。典型的症状凡是是,呈现了永久没法完成或仿佛忽视用户输进的暗码对话。在过往,gksu和GNOME显示治理器(GDM)连络OPIE利用时有这个标题问题。这类环境下,解决编制就是从common-auth移除OTPW,只把它添加在特定的办事中。

  好比说,你可以把OTPW验证添加到SSH连接,同时针对节制台或GUI登录就利用尺度的暗码提示。只要三个简单步调,就可以做到这一点:

  1. 从common-auth删除援引pam_otpw.so的任何行:

  # /etc/pam.d/common-auth on Debian Squeeze

  auth sufficient pam_unix.so nullok_secure

  auth required pam_deny.so

  2. 为PAM成立一个新的OTPW包含文件:

  # /etc/pam.d/otpw

  auth sufficient pam_otpw.so

  session optional pam_otpw.so

  3. 在/etc/pam.d/sshd中的common-auth前面添加OTPW:

  # 其他内容……

  # 启用OTPW验证。

  @include otpw

  # 尺度的Un*x验证。

  @include common-auth

  # 更多内容……

  SSH建设

  除建设PAM库外,OTPW在SSH守护法度的建设文件中还需要以下三个设置:

  # /etc/ssh/sshd_config

  UsePrivilegeSeparation yes

  UsePAM yes

  ChallengeResponseAuthentication yes

  这些设置凡是就在那边,可是可能被注释掉落了或被设置成"no",所以要作响应改动。下一步,改动建设文件后,从头装进SSH守护法度:

  # 通俗Linux

  sudo /etc/init.d/ssh reload

  # Debian 6.0.4+

  sudo service ssh reload

  # Ubuntu 11.04+

  sudo reload ssh

  生成OTPW暗码

  一旦OTPW PAM模块已被准确建设,只有具有~/.otpw文件的用户在登录过程中会遭到一次性暗码对话的质询。除只与质询的有效应对匹配的单向散列列表外,该文件里面还含有关于其内容的一些元数据。

  想成立该文件,或从头为它装填新暗码,可利用otpw-gen合用东西。默许环境下,它会成立280个暗码后缀,格局经编排后可以摆列到单面信函纸(8.5" x 11")上。因为~/.otpw文件里面只存储了单向散列,而不是暗码本身,暗码生成时,你必需捕获或打印该号令的尺度输出。你没法过后获得暗码列表,而是需要生成新的暗码。

  下面是你初次运行该号令,将输解缆送到默许打印机所看到的模样:

  $ otpw-gen | lpr

  Generating random seed ...

  If your *** password list is stolen, the thief

  should not gain access to your account with this

  information alone. Therefore, you need to memorize

  and enter below a prefix password. You will have to

  enter that each time directly before entering the

  one-time password (on the same line).

  When you log in, a 3-digit password number will be

  displayed. It identifies the one-time password on

  your list that you have to append to the prefix

  password. If another login to your account is in

  progress at the same time, several password numbers

  may be shown and all corresponding passwords have to

  be appended after the prefix password. Best generate

  a new password list when you have used up half of

  the old one.

  Enter new prefix password:

  Reenter prefix password:

  Creating '~/.otpw'.

  Generating new one-time passwords ...

  生成新暗码列表时,尺度弊端上呈现的提示略有不合:

  Overwrite existing password list '~/.otpw' (Y/n)?

  Enter new prefix password:

  Reenter prefix password:

  Creating '~/.otpw'.

  Generating new one-time passwords ...

  第一个提示确保你没有不谨慎笼盖现有的暗码列表;第二个提示要求你输进一个新暗码。没有甚么可以禁止你在每次调用时反复利用统一个前缀暗码--随机种子使得反复散列不成能呈现,可是最好的做法仍是每当你从头生成暗码列表时,利用一个新的前缀。

  假定你想在长途主机上生成暗码列表,可是打印到本地输出设备上,你可以经由过程SSH连接来做这一步,只要你信赖你的本地主机:

  read -p 'Hostname: ' &

  寄望利用stty以确保前缀暗码没有回送到屏幕上。只要你的前缀暗码仍然是安然的,利用不成信赖的输出设备跟暗码列表落到坏人手里一样没有关系。对常常出差的人来讲,这常常是个合用的安然折中方案。

  最后,想避免对某个用户实施OTPW质询,只要从该用户的主目次删除.otpw文件便可。

  利用OTPW登录

  一旦你手里有了暗码列表,便可以预备为你的SSH连接利用一次性暗码验证了。假定你未将任何身份装进到SSH代办署理里面,对话应当近似如许:

  $ ssh localhost

  Password 015:

  带数字的提示是OTPW质询。为了应对,请在你之前打印的暗码清单上找到匹配的质询ID。接下来,输进前缀暗码,后面跟着质询ID以后的字符串。

------分隔线----------------------------

推荐内容