Lisa简单介绍
Lisa是一款开源的Linux沙箱,她使用Docker进行部署,通过qemu提供虚拟化能力,目前暂支持arm32/64、x86/x64、mips平台架构。
跳转链接:https://github.com/danieluhricek/LiSa.git
Lisa整体的架构不算复杂,一些核心的功能点:
- 静态分析主要由radare2提供;
- 流量分析主要由tcpdump提供,并使用disspcap来分析抓取的pcap包;
- 动态行为主要由SystemTap提供;
其中,有两个地方比较有意思,第一是:docker;第二是:buildroot
Docker
-
使用Docker部署
整个项目都是通过Docker进行部署,非常方便。
这里建议修改worker\Dockerfile的配置。提前下载images、radare2
FROM python:3.6-slim ARG maxmind_key=YOUR—KEY RUN sed -i s@/security.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ && sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ && apt-get clean RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ libpcap-dev \ make \ unzip \ curl \ patch \ git \ qemu \ qemu-system \ openvpn \ binutils \ iprange \ wget \ tar \ e2tools \ && useradd -m lisa COPY --chown=lisa:lisa ./res/lisa-linux-images-v1.0.1.tar.gz /home/lisa/lisa-linux-images-v1.0.1.tar.gz COPY --chown=lisa:lisa ./res/radare2-master.zip /home/lisa/radare2-master.zip RUN echo "Setup Radare2 ..." \ && unzip /home/lisa/radare2-master.zip -d /home/lisa/xx \ && mv /home/lisa/xx/radare2-master /home/lisa/radare2 \ && /home/lisa/radare2/sys/install.sh \ && echo "Setup LiSa Linux images ..." \ && tar -xzvf /home/lisa/lisa-linux-images-v1.0.1.tar.gz -C /home/lisa \ && mv /home/lisa/linux-images-1.0.1 /home/lisa/images COPY --chown=lisa:lisa ./data /home/lisa/data COPY --chown=lisa:lisa ./docker /home/lisa/docker COPY --chown=lisa:lisa ./lisa /home/lisa/lisa COPY --chown=lisa:lisa ./requirements.txt /home/lisa/requirements.txt ENV PYTHONPATH /home/lisa WORKDIR /home/lisa RUN pip install -r requirements.txt -i https://pypi.douban.com/simple \ && iprange -j data/blacklists/* > data/ipblacklist \ && ./docker/worker/maxmind.sh $maxmind_key \ && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ git \ gcc \ g++ \ make \ patch \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /radare2/.git CMD ["./docker/worker/init.sh"]
-
使用Docker来编译lisa.ko
Lisa的动态行为是通过systemstap 4.1来实现,具体请参考lisa.stp。后续考虑来详细分析SystemTap。
这里也建议先下载好交叉编译工具。
在编译ko的时候,需要提供linux-header,这里的源码需要与buildroot一致,提供一个参考路径:
..../buildroot-2018.11.1/output/build/linux-4.16.7
编译ko文件如下:
docker run --rm -v ..../shared:/shared:rw csb -a arm -k /shared/linux-4.16.7 /shared/lisa.stp
Docker配置文件如下:
FROM fedora:29 RUN dnf install -y @development-tools \ gcc-c++ \ python2 \ zlib-devel \ flex \ unzip \ bison \ bzip2 \ wget \ findutils RUN rpm -e --nodeps systemtap \ && rpm -e --nodeps systemtap-client \ && rpm -e --nodeps systemtap-devel \ && rpm -e --nodeps systemtap-runtime COPY . /csb/ RUN unzip /csb/systemtap-master.zip -d /csb/xx && mv /csb/xx/systemtap-master /csb/systemtap WORKDIR /csb/systemtap RUN ./configure --with-elfutils=/csb/elfutils/elfutils-0.176/ \ && make all \ && make install \ && rm -rf /usr/share/systemtap/tapset \ && mv /csb/tapset /usr/local/share/systemtap/tapset WORKDIR / ENTRYPOINT ["/csb/entrypoint.sh"]
BuildRoot
buildroot版本:buildroot-2018.11.1
内核版本:linux-4.16.7
以aarch64为例:
修改configs/qemu_aarch64_virt_defconfig
BR2_CCACHE=y
BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TARGET_GENERIC_ROOT_PASSWD=“root”
BR2_PACKAGE_STRACE=y
BR2_PACKAGE_STRESS=y
BR2_PACKAGE_OPENSSL=y
BR2_PACKAGE_ELFUTILS=y
BR2_PACKAGE_DROPBEAR=y
修改board/qemu/aarch64-virt/linux.config
CONFIG_RELAY=y
CONFIG_KPROBES=y
CONFIG_DEBUG_INFO=y
CONFIG_GDB_SCRIPTS=y
CONFIG_DEBUG_KERNEL=y
CONFIG_FUNCTION_TRACER=y
最后编译
make qemu_aarch64_virt_defconfig
make BR2_JLEVEL=$(getconf _NPROCESSORS_ONLN)
这里同时需要把systemtap一并编译进去。
其它
安装systemtap时,使用:
make install prefix=......./buildroot-2018.11.1/output/target
,会把systemtap相关工具安装到/target/bin目录下虚拟机$PATH=
/bin:/sbin:/usr/bin:/usr/sbin
默认是不包含/usr/local/bin的~
QEMU虚拟机退出方式:
Ctrl
+a
,然后按x