Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(ossec): run "disconnected submissions" checks from systemd timers; report on saved output #7009

Merged
merged 2 commits into from
Oct 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions molecule/testinfra/vars/staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,21 @@ log_events_without_ossec_alerts:
level: "0"
rule_id: "199996"

# OSSEC should not alert when "manage.py check-disconnected-{db,fs}-
# submissions" has logged that there are no disconnected submissions.
- name: test_no_disconnected_db_submissions_produces_alert
alert: >
ossec: output: 'cat /var/lib/securedrop/disconnected_db_submissions.txt':
No problems were found. All submissions' files are present.
level: "1"
rule_id: "400800"
- name: test_disconnected_fs_submissions_produces_alert
alert: >
ossec: output: 'cat /var/lib/securedrop/disconnected_fs_submissions.txt':
No unexpected files were found in the store.
level: "1"
rule_id: "400801"

# Log events we expect an OSSEC alert to occur for
log_events_with_ossec_alerts:
# Check that a denied RWX mmaping would produce an OSSEC alert
Expand Down Expand Up @@ -215,6 +230,24 @@ log_events_with_ossec_alerts:
level: "7"
rule_id: "400700"

# OSSEC should alert when "manage.py check-disconnected-{db,fs}-submissions"
# has logged that there are disconnected submissions.
- name: test_disconnected_db_submissions_produces_alert
alert: >
ossec: output: 'cat /var/lib/securedrop/disconnected_db_submissions.txt':
There are submissions in the database with no corresponding files. Run
"manage.py list-disconnected-db-submissions" for details.
level: "1"
rule_id: "400800"
- name: test_disconnected_fs_submissions_produces_alert
alert: >
ossec: output: 'cat /var/lib/securedrop/disconnected_fs_submissions.txt':
There are files in the submission area with no corresponding records in
the database. Run "manage.py list-disconnected-fs-submissions" for
details.
level: "1"
rule_id: "400801"

fpf_apt_repo_url: "https://apt-test.freedom.press"

daily_reboot_time: "4"
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[Unit]
Description=job to check for disconnected submissions in the database

[Service]
ExecStart=/bin/bash -c "/var/www/securedrop/manage.py check-disconnected-db-submissions > /var/lib/securedrop/disconnected_db_submissions.txt"
PrivateDevices=yes
PrivateTmp=yes
ProtectSystem=full
ReadOnlyDirectories=/
ReadWriteDirectories=/var/lib/securedrop
User=www-data
WorkingDirectory=/var/www/securedrop
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[Unit]
Description=check for disconnected submissions in the database

[Timer]
# We want to run this 1 hour before reboot, or 23h after the last reboot
OnBootSec=23h

[Install]
WantedBy=timers.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[Unit]
Description=job to check for disconnected submissions on the filesystem

[Service]
ExecStart=/bin/bash -c "/var/www/securedrop/manage.py check-disconnected-fs-submissions > /var/lib/securedrop/disconnected_fs_submissions.txt"
PrivateDevices=yes
PrivateTmp=yes
ProtectSystem=full
ReadOnlyDirectories=/
ReadWriteDirectories=/var/lib/securedrop
User=www-data
WorkingDirectory=/var/www/securedrop
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[Unit]
Description=check for disconnected submissions on the filesystem

[Timer]
# We want to run this 1 hour before reboot, or 23h after the last reboot
OnBootSec=23h

[Install]
WantedBy=timers.target
6 changes: 4 additions & 2 deletions securedrop/debian/ossec-agent/var/ossec/etc/ossec.conf
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
<ignore>/var/lib/securedrop/db.sqlite</ignore>

<ignore>/var/lib/securedrop/submissions_today.txt</ignore>
<ignore>/var/lib/securedrop/disconnected_db_submissions.txt</ignore>
<ignore>/var/lib/securedrop/disconnected_fs_submissions.txt</ignore>

<ignore type="sregex">/var/lib/securedrop/shredder/tmp</ignore>

Expand Down Expand Up @@ -128,13 +130,13 @@

<localfile>
<log_format>command</log_format>
<command>sudo -u www-data /opt/venvs/securedrop-app-code/bin/python3 /var/www/securedrop/manage.py check-disconnected-db-submissions</command>
<command>cat /var/lib/securedrop/disconnected_db_submissions.txt</command>
<frequency>90000</frequency>
</localfile>

<localfile>
<log_format>command</log_format>
<command>sudo -u www-data /opt/venvs/securedrop-app-code/bin/python3 /var/www/securedrop/manage.py check-disconnected-fs-submissions</command>
<command>cat /var/lib/securedrop/disconnected_fs_submissions.txt</command>
<frequency>90000</frequency>
</localfile>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,15 +248,15 @@
<rule id="400800" level="1" >
<if_sid>530</if_sid>
<options>alert_by_email</options> <!-- force email to be sent -->
<match>ossec: output: 'sudo -u www-data /opt/venvs/securedrop-app-code/bin/python3 /var/www/securedrop/manage.py check-disconnected-db-submissions'</match>
<match>ossec: output: 'cat /var/lib/securedrop/disconnected_db_submissions.txt'</match>
<regex>There are submissions in the database with no corresponding files\.</regex>
<description>Indicates that submissions in the database are missing their corresponding files.</description>
</rule>

<rule id="400801" level="1" >
<if_sid>530</if_sid>
<options>alert_by_email</options> <!-- force email to be sent -->
<match>ossec: output: 'sudo -u www-data /opt/venvs/securedrop-app-code/bin/python3 /var/www/securedrop/manage.py check-disconnected-fs-submissions'</match>
<match>ossec: output: 'cat /var/lib/securedrop/disconnected_fs_submissions.txt'</match>
<regex>There are files in the submission area with no corresponding records in the database\.</regex>
<description>Indicates that there are files in the submission area without corresponding submissions in the database.</description>
</rule>
Expand Down
Loading