| |
| FROM python:3.12-slim-bookworm |
|
|
| LABEL \ |
| name="MobSF" \ |
| author="Ajin Abraham <ajin25@gmail.com>" \ |
| maintainer="Ajin Abraham <ajin25@gmail.com>" \ |
| contributor_1="OscarAkaElvis <oscar.alfonso.diaz@gmail.com>" \ |
| contributor_2="Vincent Nadal <vincent.nadal@orange.fr>" \ |
| description="Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static and dynamic analysis." |
|
|
| ENV DEBIAN_FRONTEND=noninteractive \ |
| LANG=en_US.UTF-8 \ |
| LANGUAGE=en_US:en \ |
| LC_ALL=en_US.UTF-8 \ |
| PYTHONUNBUFFERED=1 \ |
| PYTHONDONTWRITEBYTECODE=1 \ |
| PYTHONFAULTHANDLER=1 \ |
| MOBSF_USER=mobsf \ |
| USER_ID=9901 \ |
| MOBSF_PLATFORM=docker \ |
| MOBSF_ADB_BINARY=/usr/bin/adb \ |
| JAVA_HOME=/jdk-22.0.2 \ |
| PATH=/jdk-22.0.2/bin:/root/.local/bin:$PATH \ |
| DJANGO_SUPERUSER_USERNAME=mobsf \ |
| DJANGO_SUPERUSER_PASSWORD=mobsf |
|
|
| |
| RUN apt update -y && \ |
| apt install -y --no-install-recommends \ |
| android-sdk-build-tools \ |
| android-tools-adb \ |
| build-essential \ |
| curl \ |
| fontconfig \ |
| fontconfig-config \ |
| git \ |
| libfontconfig1 \ |
| libjpeg62-turbo \ |
| libxext6 \ |
| libxrender1 \ |
| locales \ |
| python3-dev \ |
| sqlite3 \ |
| unzip \ |
| wget \ |
| xfonts-75dpi \ |
| xfonts-base && \ |
| echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ |
| locale-gen en_US.UTF-8 && \ |
| update-locale LANG=en_US.UTF-8 && \ |
| apt upgrade -y && \ |
| curl -sSL https://install.python-poetry.org | python3 - && \ |
| apt autoremove -y && apt clean -y && rm -rf /var/lib/apt/lists/* /tmp/* |
| |
| ARG TARGETPLATFORM |
| |
| |
| COPY scripts/dependencies.sh mobsf/MobSF/tools_download.py ./ |
| RUN chmod +x ./dependencies.sh && ./dependencies.sh |
| |
| |
| COPY pyproject.toml . |
| RUN poetry config virtualenvs.create false && \ |
| poetry lock && \ |
| poetry install --only main --no-root --no-interaction --no-ansi && \ |
| poetry cache clear . --all --no-interaction && \ |
| rm -rf /root/.cache/ |
| |
| |
| RUN \ |
| apt remove -y \ |
| git \ |
| python3-dev \ |
| wget && \ |
| apt clean && \ |
| apt autoclean && \ |
| apt autoremove -y && \ |
| rm -rf /var/lib/apt/lists/* /tmp/* > /dev/null 2>&1 |
| |
| |
| |
| |
| |
| WORKDIR /home/mobsf/ |
| COPY . . |
| |
| |
| HEALTHCHECK CMD curl --fail http://localhost:8000/ || echo "Healthcheck failed" |
|
|
| |
| EXPOSE 8000 5000 |
|
|
| |
| RUN groupadd --gid $USER_ID $MOBSF_USER && \ |
| useradd $MOBSF_USER --uid $USER_ID --gid $MOBSF_USER --shell /bin/false && \ |
| chown -R $MOBSF_USER:$MOBSF_USER /home/mobsf |
|
|
| RUN chmod +x /home/mobsf/scripts/entrypoint.sh |
|
|
| RUN mkdir -p /home/mobsf/.MobSF && chown $MOBSF_USER:$MOBSF_USER /home/mobsf/.MobSF && chmod -R 777 /home/mobsf/.MobSF |
| RUN mkdir -p /home/mobsf/mobsf/StaticAnalyzer/migrations && \ |
| chown -R $MOBSF_USER:$MOBSF_USER /home/mobsf/mobsf/StaticAnalyzer && \ |
| chmod -R 777 /home/mobsf/mobsf/StaticAnalyzer |
|
|
| RUN python manage.py migrate && python manage.py migrate auth && python manage.py runserver |
|
|
| ENV MOBSF_HOME=/home/mobsf/.MobSF |
| ENV MOBSF_HOME_DIR=/home/mobsf/.MobSF |
|
|
| |
| USER $MOBSF_USER |
|
|
| RUN echo '#!/bin/bash\n\ |
| var="$1"\n\ |
| function validate_ip() {\n\ |
| local IP=$1\n\ |
| if [[ $IP =~ ^([0-9]{1,3}\\.){3}[0-9]{1,3}$ ]]; then\n\ |
| for i in ${IP//./ }; do ((i >= 0 && i <= 255 )) || { echo "Bad IP"; exit 1; } done\n\ |
| else\n\ |
| echo "Bad IP"\n\ |
| exit 1\n\ |
| fi\n\ |
| }\n\ |
| function validate_port() {\n\ |
| local PORT=$1\n\ |
| if [[ -z "$PORT" || "$PORT" -le 1024 || "$PORT" -ge 65535 ]]; then\n\ |
| echo "Invalid Port"\n\ |
| exit 1\n\ |
| fi\n\ |
| }\n\ |
| if [[ -n "$var" ]]; then\n\ |
| IP="${var%%:*}"\n\ |
| PORT="${var##*:}"\n\ |
| validate_ip "$IP"\n\ |
| validate_port "$PORT"\n\ |
| else\n\ |
| IP="[::]"\n\ |
| PORT="8000"\n\ |
| fi\n\ |
| python3 -m poetry run gunicorn -b ${IP}:${PORT} mobsf.MobSF.wsgi:application --workers=1 --threads=10 --timeout=3600 \\\n\ |
| --log-level=critical --log-file=- --access-logfile=- --error-logfile=- --capture-output' > /home/mobsf/run.sh |
|
|
| RUN chmod +x /home/mobsf/run.sh |
|
|
| |
|
|
| CMD ["/home/mobsf/scripts/entrypoint.sh", "/home/mobsf/run.sh"] |