ABAP安全存储:如何存储密码?

4

我以前从未需要在ABAP系统中存储密码...现在是时候学习一些新东西了...

我需要存储一个密码,用于连接到另一个系统的ABAP系统中,所以我不能存储(单向)哈希。

我发现了一些函数模块,例如FIEB_PASSWORD_ENCRYPT(它使用硬编码密钥),或者建议存储密码的base64编码版本(天哪!)=>这两种方法只能防止任何人“快速读取”密码,如果密码被窃取,仍然无法防止。

我还发现了SECSTORESAP帮助链接),显然只能被SAP组件而非自定义应用程序使用。

基本上,我的需求是:

  • 以加密形式将密码存储在某个DB表中

  • 在该表上进行普通选择无法轻易获取密码

  • 从DB表中以明文形式获取密码,以便能够将其传递给“其他系统”

  • 我不想在安全领域重新发明轮子。

我认为,一定有可以用于此目的的东西...

更新:为什么我需要这样做:

  • 我正在访问一个HTTPS系统(目标类型G),所有连接参数都在目标中配置。
  • 不幸的是,需要将密码作为表单参数在正文中传输

免责声明:目前我正在讨论是否可以将其转换为基本身份验证,这既不更安全也不更不安全(标题与正文)。但是使用基本身份验证,我可以使用目标配置,而目标配置又使用SECSTORE。由于涉及多个方面,系统访问是多层次的,因此这个讨论是一个漫长的故事...


2
FuBa是德语“函数模块”的缩写;永远不要使用FIEB_PASSWORD_ENCRYPT/DECRYPT,因为它们基于16世纪的维吉尼亚密码算法。是的,SAP明确表示不要使用SecStore,因为这很少见,不要使用SecStore。要连接其他系统,请使用RFC目标。如果您不想使用,请解释为什么不能使用RFC目标。 - Sandra Rossi
@sandra-rossi FIEB_PASSWORD => 无论使用何种加密方式,它都是对称的,所以基本上它与base64的值相同:/ RFC目标:将其添加到原始问题中。 - iPirat
3个回答

5
您可以使用SSF_KRN_ENVELOPE函数进行加密,使用SSF_KRN_DEVELOPE进行解密。它使用RSA标准,因此结果可能很大。我建议在https://github.com/Sumu-Ning/AES上使用ABAP AES类。
这些函数使用系统证书,AES库需要IV和密钥,因此如果用户具有调试或开发人员授权,则可以获取它们。
正确的方法是使用标准通信方式。例如,使用带有基本身份验证的SOAP客户端,并将密码保存在SOA管理器中。也可以在SM59配置中使用http和https协议的基本身份验证。

至于标准:是的,经过数周的讨论后我放弃了... SOAP或非SOAP是完全不同的问题。基本身份验证至少在“无需重新发明密码存储”方面会有很大帮助。 - iPirat
@TheGreatContini:与ABAP无关。如果系统A需要向系统B发送密码,则系统A必须以可解密的方式存储它!(是的,还有其他身份验证方法,请不要在这里开始讨论)=>您是否为自己使用密码管理器?它是否以不可解密的方式存储您的密码?这里的原理相同! - iPirat
@iPirat 抱歉,我误读了问题并撤回了我之前的评论。 - TheGreatContini
@TheGreatContini - iPirat
@mkysoft,我还没有尝试你的建议,因为目前的讨论倾向于实际使用基本身份验证(在这种情况下,加密将由SECSTORE处理)。 - iPirat
显示剩余2条评论

0

我在这里发布的选项是一种没有加密的选项,但似乎“相当安全(商标)”。欢迎评论。

  • 将密码以明文形式存储在数据库表中
  • 将该表设置为“N:不允许显示/修改”
  • 创建一个程序将密码写入该表中
  • 没有任何程序会输出密码。

这意味着,在生产ABAP环境中,只有拥有以下至少一项权限的人员才能访问密码(如果我错了,请纠正我

  • 生产调试权限(基本上没有人)
  • 直接DB访问(基本上没有人)

3
SE16N_INTERFACE和SQVI可用于从具有“N:不允许显示/修改”的表中获取数据。 - mkysoft
可能还有其他绕过“N”的方法,例如在此处提到的内容https://www.quantumleap.it/cracking-sap-password-retrieve-hashes-sap-abap-system/,如ST04。 - Tschenser

0
啊,神秘的SECSTORE。让我们从交易截图中来看一下它。

SECSTORE Default Key

我们现在处于传统模式,并且RSECTAB表中的数据使用内核中硬编码的默认密钥(dk1)进行加密。SSFS_A4H.DAT文件存在,但现在不用于RSECTAB。 rsecssfx info/list 的输出

rsecssfx info/list

由于SSFS_A4H.KEY文件不存在,SSFS_A4H.DAT中的记录再次使用内核中硬编码的另一个默认密钥(dk2)进行加密。
遵循当前的SAP建议。

Secure Storage in the File System

RSECTAB使用存储在SSFS_A4H.KEY(1)中的密钥进行加密,而SSFS_A4H.DAT(2)中存储了一个带有标识符(3)的密钥,该密钥又使用内核中硬编码的另一个默认密钥(dk3)进行加密。 为了完整起见,以下是rsecssfx info/list的输出。

rsecssfx info/list

我想说的是:你可以通过将加密密钥放入文件系统中的文件,并使用标准的CL_SEC_SXML_WRITER=>{ENCRYPT/DECRYPT}或https://github.com/Sumu-Ning/AES来模仿SECSTORE的行为,从而轻松地进行密码加密。
个人而言,我更喜欢自己封装的CL_SEC_SXML_WRITER https://github.com/rstenet/abap-aes,这是我所知道的唯一支持AES-GCM的ABAP类,如果你需要的话。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接