Watch 6 Star 7 Fork 2

openEuler / marketingMulanPSL-2.0

No.17 - 库函数行为收集器

暑期2020
待办的
mailofzxf  Opened this issue

标题 No.17 - 库函数行为收集器

描述

访问控制针对的是应用、被访问的对象以及访问模式。但是,为了做好访问控制,对于一个程序(无论是二进制的还是有源码的),让开发者去逐个搜罗所有可能的访问对象也是很头疼的事,尤其是隐含在所使用的库函数中的访问对象,甚至是隐藏在深层嵌套的函数中的访问对象。【这里不提strace、ltrace类工具,因为那是需要把应用运行起来才能去收集访问对象的。这里关注的是静态获取访问对象。】

比如,Linux系统中有很多本地的小数据库文件(多是纯文本格式的),C库都提供了相应的函数去使用这些数据库。下面简单列出几组:

文件 C函数 访问模式
/etc/passwd getpwent() r/w
/etc/group getgrent() r/w
/etc/shadow getspnam() r/w
/etc/services getservent() r/w
/etc/fstab getmntent() r/w
/etc/hosts gethostent() r/w

如果应用调用了以上函数,就可以确定此应用会操作对应的文件对象。当然,C库中也有并非针对类似数据库对象的函数。

对C库的所有函数构造一个{func, file, access_mode}的映射表(可称为 函数级访问映射表 ),就可以帮助开发者挖掘出隐含的访问对象。C库的历史很久了,其中所含函数的行为也基本稳定,相应地,这个函数级访问映射表也应该是稳定的。

很多其它库与C库类似,可以把这种方法推广到其它库上。为这些库建立一个映射表后,可以自动获取应用中隐含的访问对象(至少是部分的),其余的部分可以让开发者自己去补充(开发者对此应该非常了解)。

进一步说,对于一个C源程序,找出其中所含的函数(可能是深层调用的),再借助上述映射表,就可以构建出{app, file, access_mode}这样的 应用级访问映射表 ,作为为此应用制定访问控制策略的输入。

本任务的目的就是完成一个工具,实现对这种应用级映射表的自动构建。

具体步骤包括:
1,收集【先只针对C库】 : 收集C库中的所有函数,找出它们要访问或者引用的文件(具有磁盘文件inode的各类对象),形成一个{func, file, access_mode}的映射表;
2,扫描:扫描给定app的源码(C),找出步骤1中可以识别的函数;
3,汇总:基于扫描结果,形成该app的访问映射表{app, file, access_mode}集合。 这个集合不是app的所有访问范围,只是隐含在库函数中的访问范围。【其它明确通过open类函数使用的文件对象可由开发者单独列出】

后续工作:
扩展所考察的库范围,构造一个具有此功能的“专家库”。

难度

导师 mailofzxf

联系方式 mailofzxf@aliyun.com

产出标准

  • 一个可运行的工具,可以给出一个C app中隐含的访问对象列表及其访问方式。

技术要求

  • 开发语言不限,推荐标准C语言。

相关项目
暂无

Attachments
5329419 openeuler ci bot 1578984659 23249 genedna 1586065964 total 4 participants

Comments (1)

5329419 openeuler ci bot 1578984659
openeuler-ci-bot 2020-05-21 20:33 owner

Hey @mailofzxf , Welcome to openEuler Community.
All of the projects in openEuler Community are maintained by @openeuler-ci-bot .
That means the developers can comment below every pull request or issue to trigger Bot Commands.
Please follow instructions at https://gitee.com/openeuler/community/blob/master/en/sig-infrastructure/command.md to find the details.

Sign in to comment

Assignees
Labels
Not set
Projects
Milestones
Branches
Planed to start
Planed to end
Top level
Priority
1
https://gitee.com/openeuler/marketing.git
git@gitee.com:openeuler/marketing.git
openeuler
marketing
marketing

Search