欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

企业安全之内部代码管理平台Gitlab下载及权限审计

来源:本站整理 作者:佚名 时间:2019-05-15 TAG: 我要投稿

企业通常会使用Gitlab作为内部代码管理平台,一来私有仓库更加安全,二来gitlab的功能十分完整。但仍不能保证私有仓库中的代码不被泄露到外部,于是对gitlab的权限审计以及下载审计就变得尤为重要。本文将基于gitlab-ee-11.10版本,详细叙述如何对gitlab的权限及代码下载进行审计。
0×00 快速部署gitlab
笔者使用了docker进行快速部署:
docker pull gitlab/gitlab-ee
docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ee:latest
gitlab可以与ldap绑定,使用AD域账号进行登录。如果想要修改gitlab.rb文件,可以登入到容器中修改:
docker exec -it CONTAINER_ID /bin/bash
配置完成后,使用root访问http://ip:
官方网站: https://docs.gitlab.com/omnibus/docker/
0×01 Git的传输协议了解
Git主要以两种方式跨越两个仓库传输数据。
1.哑协议
Git基于HTTP之上传输通常被称为哑协议,这是因为它在服务端不需要有针对Git特有的代码。这个获取过程仅仅是一系列GET请求,客户端可以假定服务端的Git仓库中的布局。简单解读官方给出的举例,一次git clone过程:
git clone http://github.com/schacon/simplegit-progit.git  //下载simplegit-progitInitialized empty Git repository in /private/tmp/simplegit-progit/.git/  //在/private/tmp/simplegit-progit/.git/目录中初始化一个空的git仓库got ca82a6dff817ec66f44342007202690a93763949  //获取info/refs文件,这个文件由服务端的update-server-info生成,用于给不进行动态包生成的哑服务器提供辅助信息文件,以帮助客户机发现服务器有哪些引用和包,哑服务器意味着通过http访问walk ca82a6dff817ec66f44342007202690a93763949  //获取commit对象got 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 //查看commit对象的内容Getting alternates list for http://github.com/schacon/simplegit-progit.git  //获取替代仓库listGetting pack list for http://github.com/schacon/simplegit-progit.git //获取打包文件listGetting index for pack 816a9b2334da9953e530f27bcac22082a9f5b835 //获取这个打包文件的索引Getting pack 816a9b2334da9953e530f27bcac22082a9f5b835 which contains cfda3bf379e4f8dba8717dee55aab78aef7f4daf  //查看打包文件的索引是否包括要找的对象walk 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7  //获取commitwalk a11bef06a3f659402fe7563abf99ad00de2209e6  //下载对象
2.智能协议
HTTP方法是很简单但效率不是很高。使用智能协议是传送数据的更常用的方法。这些协议在远端都有Git智能型进程在服务,它可以读出本地数据并计算出客户端所需要的合适的数据给它,这有两类传输数据的进程:一对用于上传数据和一对用于下载。此处只对下载展开描述:
当下载数据时,fetch-pack和upload-pack进程就起作用了。客户端启动fetch-pack进程,连接至远端的upload-pack进程,以协商后续数据传输过程。在远端仓库有不同的方式启动upload-pack进程。你可以使用与receive-pack(接收推送到存储库中的内容时所启用的进程)相同的透过SSH管道的方式,也可以通过Git后台来启动这个进程,它默认监听在9418号端口上。这里fetch-pack进程在连接后像这样向后发送数据:
fgit-upload-pack schacon/simplegit-progit.git\0host=myserver.com\0
它也是以4字节指定后续字节长度的方式开始,然后是要运行的命令,和一个空字节,然后是服务端的主机名,再跟随一个最后的空字节。Git后台进程会检查这个命令是否可以运行,以及那个仓库是否存在,以及是否具有公开权限。如果所有检查都通过了,它会启动这个upload-pack进程并将客户端的请求移交给它。 如果你透过SSH使用获取功能,fetch-pack会像这样运行:
ssh -x git@github.com "git-upload-pack 'schacon/simplegit-progit.git'"
0×02 gitlab数据库结构了解
docker镜像使用的是postgresql数据库,一共有236张数据表,我们知道gitlab采用了ueba的用户权限管理模型,因此想要获得用户、项目、项目组、key之间的关系,我们首先要关心这几张表:
identities存储ldap的信息,其中extern_uid存储ldap的部门等信息 :
Column
Type
 id                  
 integer                    
 extern_uid          
 character varying          
 provider            
 character varying          
 user_id             
 integer                    
 created_at          
 timestamp without time zone
 updated_at          
 timestamp without time zone
 secondary_extern_uid
 character varying          
 saml_provider_id    

[1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载