<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: johnettagaweraks</title>
    <description>The latest articles on DEV Community by johnettagaweraks (@johnettagaweraks).</description>
    <link>https://dev.to/johnettagaweraks</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4214752%2Fa63d1043-8027-441d-9139-c0c5351c2f12.png</url>
      <title>DEV Community: johnettagaweraks</title>
      <link>https://dev.to/johnettagaweraks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnettagaweraks"/>
    <language>en</language>
    <item>
      <title>An Authelia Portal Is Useful Only When Its Access Rules Are Tested</title>
      <dc:creator>johnettagaweraks</dc:creator>
      <pubDate>Thu, 29 Oct 2026 23:41:15 +0000</pubDate>
      <link>https://dev.to/johnettagaweraks/an-authelia-portal-is-useful-only-when-its-access-rules-are-tested-3ceb</link>
      <guid>https://dev.to/johnettagaweraks/an-authelia-portal-is-useful-only-when-its-access-rules-are-tested-3ceb</guid>
      <description>&lt;h1&gt;
  
  
  An Authelia Portal Is Useful Only When Its Access Rules Are Tested
&lt;/h1&gt;

&lt;p&gt;Authelia provides authentication and authorization in front of applications through a web portal and forwarded authentication. A portal login page can appear on a public hostname while the applications behind it are protected by separate access-control rules. That makes the portal itself a less useful indicator of exposure than the route policy behind it.&lt;/p&gt;

&lt;p&gt;ZoomEye count-only queries on 2026-10-30 returned zero matches for &lt;code&gt;app="Authelia"&lt;/code&gt; and 11,776 for &lt;code&gt;title="Authelia"&lt;/code&gt; between 06:41 and 06:42 China Standard Time. The title may include documentation, login pages, or reverse-proxy error pages. The result does not show which applications are protected, which users can authenticate, or whether a rule permits an unauthenticated route.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep proxy trust inside the identity path
&lt;/h2&gt;

&lt;p&gt;Authelia's forwarded-auth flow checks request metadata and a session cookie. A reverse proxy passes the identity or authorization result to the application. If any client can reach the application directly, or can set the headers normally added by the proxy, the application may accept an unauthenticated request. Strip client-supplied proxy headers at the edge and firewall the application port so only the proxy can reach it.&lt;/p&gt;

&lt;p&gt;The access-control rule should specify the domain, path, and policy. A broad &lt;code&gt;bypass&lt;/code&gt; rule for health checks or static assets can accidentally cover an administrative path if the path matching is broader than intended. Test exact paths, prefixes, URL-encoded paths, trailing slashes, and case variations. A redirect from an unauthenticated request should not reveal a protected page body before the redirect completes.&lt;/p&gt;

&lt;p&gt;Use a policy that matches the operation. A portal that requires a password for one route and a passkey for another should have those rules in the same reviewed configuration. The source documentation describes rules that can require different authentication levels for different resources. Map groups to resources explicitly and avoid a default that permits everything when no rule matches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review session and identity-provider revocation
&lt;/h2&gt;

&lt;p&gt;Authelia stores sessions and can act as an identity provider. A user who is removed from a group may retain an existing session until it expires or is revoked. Test group removal and identity-provider logout with a protected application. If the application caches its own authorization result, confirm that the cache has a bounded lifetime or a revocation path.&lt;/p&gt;

&lt;p&gt;OIDC bearer-token use is different from a browser cookie. The token must be accepted only where the client and scope were intended. Review token audience, issuer, and lifetime. A bearer token that is accepted by the wrong proxy path can turn a narrow integration into a broad access grant. Do not accept a token merely because its signature is valid.&lt;/p&gt;

&lt;p&gt;Passwords and passkeys need recovery rules. A recovery path that bypasses the second factor may be the weakest link. Restrict who can reset an account and require an out-of-band identity check. Record recovery actions, and alert on repeated failures or a reset immediately followed by access to sensitive routes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test from the application side
&lt;/h2&gt;

&lt;p&gt;For an owned title match, confirm the portal URL and deployment owner, then test a protected application directly and through the proxy. Send a request with a forged &lt;code&gt;Remote-User&lt;/code&gt;, &lt;code&gt;Remote-Groups&lt;/code&gt;, or equivalent header. It should fail when it bypasses the proxy. Repeat with a valid session and a removed user. Confirm that the application rejects an expired session even if the portal still renders.&lt;/p&gt;

&lt;p&gt;Check the portal domain for an exposed API or configuration endpoint. A login page does not justify exposing the full management interface. Put administrator endpoints on a separate network or require a stronger policy, and review logs for the source address and authenticated identity.&lt;/p&gt;

&lt;p&gt;The 11,776 title matches are not a vulnerability count. Authelia's security value comes from the coupling between the identity portal, the trusted proxy, and the application route. Test that coupling with concrete requests instead of treating the presence of a portal as proof that every route is protected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Query and scope
&lt;/h2&gt;

&lt;p&gt;The standalone SDK used &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and page size 1. &lt;code&gt;app="Authelia"&lt;/code&gt; returned zero and &lt;code&gt;title="Authelia"&lt;/code&gt; returned 11,776. Collection ran from 2026-10-29 22:41:49 to 22:41:52 UTC.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.authelia.com/configuration/security/access-control/" rel="noopener noreferrer"&gt;Authelia: Access control configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.authelia.com/integration/prologue/get-started/" rel="noopener noreferrer"&gt;Authelia: Forwarded authentication getting started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.authelia.com/integration/openid-connect/oauth-2.0-bearer-token-usage/" rel="noopener noreferrer"&gt;Authelia: OAuth 2.0 bearer token usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai" rel="noopener noreferrer"&gt;ZoomEye count-only measurement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>authelia</category>
      <category>identityproxy</category>
    </item>
    <item>
      <title>Uptime Kuma Exposure Needs Separate Dashboard and Status-Page Reviews</title>
      <dc:creator>johnettagaweraks</dc:creator>
      <pubDate>Thu, 29 Oct 2026 20:20:56 +0000</pubDate>
      <link>https://dev.to/johnettagaweraks/uptime-kuma-exposure-needs-separate-dashboard-and-status-page-reviews-445m</link>
      <guid>https://dev.to/johnettagaweraks/uptime-kuma-exposure-needs-separate-dashboard-and-status-page-reviews-445m</guid>
      <description>&lt;h1&gt;
  
  
  Uptime Kuma Exposure Needs Separate Dashboard and Status-Page Reviews
&lt;/h1&gt;

&lt;p&gt;Uptime Kuma provides monitoring dashboards, public status pages, and metrics access. Those surfaces have different intended audiences. A status page may be designed to be public, while the administrative dashboard and monitoring API need stronger protection. Counting the product without separating these paths can lead to the wrong exposure decision.&lt;/p&gt;

&lt;p&gt;The project's API documentation describes Socket.IO communication after authentication for interactive use. It also documents a Prometheus metrics endpoint whose authentication depends on server settings and API-key configuration [1]. The API-keys documentation says that after the first API key is added, basic authentication is permanently disabled for the protected endpoints [2]. An operator should record which method is active, which endpoints it protects, and whether a public status page shares the same hostname or reverse proxy.&lt;/p&gt;

&lt;p&gt;On 2026-10-29 at 19:45 UTC, ZoomEye returned 579,925 matches for &lt;code&gt;app="Uptime Kuma"&lt;/code&gt; and 74,489 for &lt;code&gt;title="Uptime Kuma"&lt;/code&gt;. Both queries used &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and &lt;code&gt;pagesize=1&lt;/code&gt;; the matched totals came from the SDK response [3]. The application query is preserved in the search link [4]. The application count is much larger in this observation. That does not prove that 579,925 public dashboards exist. Application fingerprints can cover assets with shared components, and a match does not establish the exposed route, authentication setting, or version.&lt;/p&gt;

&lt;p&gt;The separate counts are still useful because they expose a large difference. Start with a bounded validation sample and confirm the response and route. Determine whether the observed service is the dashboard, a status page, a metrics endpoint, or an application page that contains the product name. Record the public hostname and path for each surface. A reverse proxy may expose &lt;code&gt;/status&lt;/code&gt; publicly while protecting &lt;code&gt;/dashboard&lt;/code&gt; and &lt;code&gt;/metrics&lt;/code&gt;, or the opposite.&lt;/p&gt;

&lt;p&gt;Inventory should include the dashboard endpoint, status-page slugs, monitor groups, API-key state, metrics exposure, notification integrations, and the database location. Review who can create monitors, read check results, change notification credentials, and export data. Status pages can reveal internal service names, hostnames, and maintenance schedules. That may be intentional for customers, but it is still an information disclosure decision.&lt;/p&gt;

&lt;p&gt;A negative test should request the dashboard and metrics endpoint without credentials from an external network. Then request a public status page and confirm that only the intended content is visible. Test basic authentication versus API-key behavior on the metrics route. Submit a revoked key and confirm rejection. Review whether the status page leaks administrative links, monitor notes, or internal addresses.&lt;/p&gt;

&lt;p&gt;Protect the administrative dashboard with a restricted network or an authenticated proxy. Require MFA at the identity layer where available. Store notification and integration secrets outside public repositories, rotate them when an administrator leaves, and review webhook destinations. Back up the Uptime Kuma data directory and database carefully because it contains monitor configuration and potentially sensitive notification settings.&lt;/p&gt;

&lt;p&gt;Monitor login failures, API-key creation and deletion, monitor changes, notification configuration, and exposure changes at the reverse proxy. A public status page is not an incident by itself. The review should establish which data is visible, who approved that visibility, and whether the dashboard and metrics layer remain protected.&lt;/p&gt;

&lt;p&gt;ZoomEye gives the team a broad external measurement and a way to compare changes. It cannot distinguish the dashboard from a public status page. The useful conclusion combines the query with route evidence, authentication testing, and a data-exposure decision for each surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/louislam/uptime-kuma/wiki/API-Documentation/692198f84f3675a53a8ece7eb91a6a84566ee98e" rel="noopener noreferrer"&gt;Uptime Kuma API documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/louislam/uptime-kuma/wiki/API-Keys/705b78e014714ef7fe108e90b80db51beac05db5" rel="noopener noreferrer"&gt;Uptime Kuma API keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/agent/doc" rel="noopener noreferrer"&gt;ZoomEye API and search documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJVcHRpbWUgS3VtYSI%3D" rel="noopener noreferrer"&gt;ZoomEye application query for Uptime Kuma&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>security</category>
      <category>zoomeye</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Using ZoomEye to find Tomcat assets without overstating CVE-2026-101296</title>
      <dc:creator>johnettagaweraks</dc:creator>
      <pubDate>Thu, 29 Oct 2026 17:01:07 +0000</pubDate>
      <link>https://dev.to/johnettagaweraks/using-zoomeye-to-find-tomcat-assets-without-overstating-cve-2026-101296-3636</link>
      <guid>https://dev.to/johnettagaweraks/using-zoomeye-to-find-tomcat-assets-without-overstating-cve-2026-101296-3636</guid>
      <description>&lt;h1&gt;
  
  
  Using ZoomEye to find Tomcat assets without overstating CVE-2026-101296
&lt;/h1&gt;

&lt;p&gt;A useful internet search begins with a narrow question. For CVE-2026-101296, that question is not how many vulnerable systems exist worldwide. It is whether an Apache Tomcat deployment is missing from the organization's asset inventory and needs a configuration review.&lt;/p&gt;

&lt;p&gt;ZoomEye returned 585,159 matches for &lt;code&gt;app="Apache Tomcat"&lt;/code&gt; on October 29, 2026. A separate query for &lt;code&gt;vul.cve="CVE-2026-101296"&lt;/code&gt; returned zero. The first number describes a product fingerprint population. The second describes the indexed matches for a CVE field. Neither is a vulnerable-host count.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the product query is broad
&lt;/h2&gt;

&lt;p&gt;Apache identifies affected Tomcat ranges across 11.0, 10.1, 9.0, 8.5 and 7.0. A product fingerprint can include fixed releases, unsupported releases and servers that do not use JNDIRealm at all. It can also include multiple services associated with one host.&lt;/p&gt;

&lt;p&gt;The vulnerable configuration is more specific: JNDIRealm must be in the authentication path and a non-GSSAPI SASL mechanism must be configured. ZoomEye's product result cannot see that internal configuration. Treating every product match as affected would overstate both the exposure and the required remediation population.&lt;/p&gt;

&lt;p&gt;The zero CVE filter has a similar boundary. It means the filter produced no indexed matches at the time of the query. It does not prove that no system is affected or that the CVE is absent from internal inventories. Coverage, indexing and query timing all affect the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the count can support
&lt;/h2&gt;

&lt;p&gt;The product population is useful for discovery. An organization can compare public matches with DNS, cloud accounts, certificate records and application ownership. A Tomcat address without a known owner or deployment record deserves investigation.&lt;/p&gt;

&lt;p&gt;The result can also provide a broad baseline before an exercise. If a future measurement finds new public endpoints, the change may reflect new deployments, changed indexing or shifts between addresses. It does not by itself show that those endpoints run a vulnerable version.&lt;/p&gt;

&lt;p&gt;Keep the exact dork, asset type, query time and count with the decision. For this round, the Search observation was &lt;code&gt;app="Apache Tomcat"&lt;/code&gt;, subtype &lt;code&gt;all&lt;/code&gt;, status &lt;code&gt;ok&lt;/code&gt;, count 585,159. The Filter observation was &lt;code&gt;vul.cve="CVE-2026-101296"&lt;/code&gt;, subtype &lt;code&gt;all&lt;/code&gt;, status &lt;code&gt;ok&lt;/code&gt;, count 0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a stronger internal inventory
&lt;/h2&gt;

&lt;p&gt;Start with the service catalog. List every Tomcat runtime, its owner, environment, branch, application and authentication method. Include embedded deployments where a product package or application packages Tomcat inside another server. Those instances may not appear in a host-level package list.&lt;/p&gt;

&lt;p&gt;For each deployment, record whether JNDIRealm is used for user credential validation and which SASL mechanism is configured. This is the configuration evidence that converts a broad product asset into a candidate for the vulnerability. Store configuration references rather than passwords.&lt;/p&gt;

&lt;p&gt;Reconcile the internal list with external observations. Mark unexplained public addresses for validation. Do not mark an unmatched internal asset as safe because it did not appear in ZoomEye; a non-public service can still be vulnerable and important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep discovery separate from confirmation
&lt;/h2&gt;

&lt;p&gt;An external result can answer whether a service appears to be Apache Tomcat. A wrong-password authentication test answers whether the deployed authentication path rejects invalid credentials. A directory audit log supports that result. These are different evidence levels.&lt;/p&gt;

&lt;p&gt;A practical workflow records them in sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;External match identifies a possible Tomcat service.&lt;/li&gt;
&lt;li&gt;Ownership and DNS data identify the responsible application.&lt;/li&gt;
&lt;li&gt;Version inspection confirms the release family.&lt;/li&gt;
&lt;li&gt;JNDIRealm configuration review confirms the vulnerable authentication condition.&lt;/li&gt;
&lt;li&gt;A negative-password test confirms the fixed behavior.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only the later steps support a statement that a specific asset was affected or repaired.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure progress without inventing a rate
&lt;/h2&gt;

&lt;p&gt;A program can track the number of Tomcat assets with a known owner, the number with a recorded release, the number using JNDIRealm and the number whose wrong-password test passes. Those ratios use an internal denominator that the team can explain.&lt;/p&gt;

&lt;p&gt;The public ZoomEye count does not provide that denominator. It also does not say how many matches belong to the organization. Use it to find gaps in discovery and to prompt owner validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tomcat.apache.org/security-11.html" rel="noopener noreferrer"&gt;Apache Tomcat 11 security advisory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tomcat.apache.org/security-10.html" rel="noopener noreferrer"&gt;Apache Tomcat 10 security advisory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tomcat.apache.org/security-9.html" rel="noopener noreferrer"&gt;Apache Tomcat 9 security advisory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://access.redhat.com/security/cve/cve-2026-101296" rel="noopener noreferrer"&gt;Red Hat CVE-2026-101296 record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJBcGFjaGUgVG9tY2F0Ig%3D%3D" rel="noopener noreferrer"&gt;ZoomEye Search observation for &lt;code&gt;app="Apache Tomcat"&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>apachetomcat</category>
      <category>cve2026101296</category>
      <category>zoomeye</category>
      <category>assetinventory</category>
    </item>
    <item>
      <title>Cube has 1,173 title matches and 87 application matches in one bounded review</title>
      <dc:creator>johnettagaweraks</dc:creator>
      <pubDate>Thu, 29 Oct 2026 13:41:31 +0000</pubDate>
      <link>https://dev.to/johnettagaweraks/cube-has-1173-title-matches-and-87-application-matches-in-one-bounded-review-jga</link>
      <guid>https://dev.to/johnettagaweraks/cube-has-1173-title-matches-and-87-application-matches-in-one-bounded-review-jga</guid>
      <description>&lt;h1&gt;
  
  
  Cube has 1,173 title matches and 87 application matches in one bounded review
&lt;/h1&gt;

&lt;p&gt;A semantic layer can look like a database endpoint, an API used by a dashboard, or a product management page. Its product fingerprints reflect those interfaces imperfectly. On 2026-10-28 at 22:48 UTC, a bounded ZoomEye SDK probe used the global &lt;code&gt;all&lt;/code&gt; scope, page 1, and page size 1. The query &lt;code&gt;app="Cube"&lt;/code&gt; returned 87. The query &lt;code&gt;title="Cube.js"&lt;/code&gt; returned 1,173.&lt;/p&gt;

&lt;p&gt;The application result is the closer product-specific lead. The title result is broader and may include pages that mention the framework without serving a Cube API. A team should preserve both counts and select the app measurement as its primary discovery query, while recording the title comparison as background. Neither number demonstrates that an API accepts anonymous queries.&lt;/p&gt;

&lt;p&gt;Cube's security material describes token-based access and a security context used for data-access decisions. External identity systems can supply claims, and the semantic layer can enforce policy before a query reaches the underlying database. The useful follow-up is therefore to identify the API endpoint, the issuer and audience expected by that deployment, and the database identity used for serving.&lt;/p&gt;

&lt;p&gt;Ask whether the matched host is a publicly documented demo, an internal analytics service, or a production application. A demo may intentionally expose sample data. A production endpoint needs a reviewed public boundary even if its model contains no sensitive dimensions. Check token validation, tenant context, row or measure restrictions, cache separation, and database grants as one chain.&lt;/p&gt;

&lt;p&gt;Do not run ad hoc SQL against an unowned Cube service to see what happens. An owner can test the intended policy with a controlled tenant and a negative case for another tenant. The evidence should show a rejected request before the database returns data, not a generic error that hides where authorization failed.&lt;/p&gt;

&lt;p&gt;The query sizes also suggest a useful ownership strategy. A smaller app list can be assigned first. The larger title list can be kept as a research queue for identifying new product fingerprints or public demos. As fingerprints and responses change, the team can narrow the list rather than treating all 1,173 pages as equivalent.&lt;/p&gt;

&lt;p&gt;ZoomEye supplies discovery and prioritization. The security decision depends on tokens, claims, data policies, and the database account behind the semantic layer. The app and title numbers help a team choose where to look, not what conclusion to publish.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9IkN1YmUuanMi" rel="noopener noreferrer"&gt;ZoomEye result for title="Cube.js"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cube.dev/product/data-access-control" rel="noopener noreferrer"&gt;Cube data access control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cube.dev/security" rel="noopener noreferrer"&gt;Cube security overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cube.dev/product/data-apis" rel="noopener noreferrer"&gt;Cube data APIs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>cube</category>
      <category>semanticlayer</category>
    </item>
    <item>
      <title>Linux audit records need a tamper-resistant destination</title>
      <dc:creator>johnettagaweraks</dc:creator>
      <pubDate>Thu, 29 Oct 2026 10:20:53 +0000</pubDate>
      <link>https://dev.to/johnettagaweraks/linux-audit-records-need-a-tamper-resistant-destination-47g0</link>
      <guid>https://dev.to/johnettagaweraks/linux-audit-records-need-a-tamper-resistant-destination-47g0</guid>
      <description>&lt;h1&gt;
  
  
  Linux audit records need a tamper-resistant destination
&lt;/h1&gt;

&lt;p&gt;Linux auditd can record privilege changes, authentication events, process execution, file access, and policy changes. The records are valuable only if an attacker cannot edit the same local log and the operations team can retrieve it after a host is isolated. Remote forwarding is a practical first step, but it is not a complete chain of custody.&lt;/p&gt;

&lt;p&gt;Red Hat's audit documentation describes audit events and daemon behavior, while the remote-logging guidance covers sending auditd records to another server. The architectural decision is where to place that server, how to authenticate the sender, and how long to retain the evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate collection from custody
&lt;/h2&gt;

&lt;p&gt;The audited host should not be the only place where its evidence lives. An attacker with root access can stop the audit daemon, modify local policy, or remove a log file unless the platform provides additional protections. Forward records to a destination that has independent access control and a different failure domain. Restrict who can alter the receiver's configuration and stored files.&lt;/p&gt;

&lt;p&gt;Encrypt transport and authenticate the source. A plaintext UDP path can be lost, forged, or replayed without leaving an obvious mark. Use a mutually authenticated transport supported by the audit forwarding stack, or send through a well-managed log pipeline that adds a source identity. Preserve the original event fields. Parsing them into a normalized store is useful, but the raw record should remain available for investigation.&lt;/p&gt;

&lt;p&gt;Keep host clocks synchronized and record the time source. An event with a correct local timestamp is still hard to place if the host clock was wrong. Use authenticated network time for critical systems where possible, and monitor the offset. When receiving events from many hosts, retain both the event time and the receiver's ingestion time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plan for policy changes
&lt;/h2&gt;

&lt;p&gt;Audit rules should be managed as configuration and change controlled. Include rules for changes to audit policy, log forwarding, authentication, privilege escalation, and critical data paths. Alert on attempts to stop or reconfigure the audit daemon, and make those alerts fan out to the central receiver.&lt;/p&gt;

&lt;p&gt;Test retention and recovery. Define how long records must remain available, how access is audited, and whether the receiver can restore data after corruption. A remote collector with a seven-day retention period may be useful for detection but insufficient for an incident that is discovered after three weeks. Different retention tiers can preserve the raw record longer than the searchable index.&lt;/p&gt;

&lt;p&gt;Review the source of time and identity for each event. A local username is not necessarily a human identity, and a process ID can be reused. Correlate audit events with session records, SSH logs, container metadata, and cloud control-plane logs where applicable. The central record is stronger when it can connect what happened on the host to who initiated the session.&lt;/p&gt;

&lt;p&gt;The goal is not to make tampering impossible on every host. The goal is to make tampering visible and to keep a copy outside the host's control. That requires transport security, independent receivers, retention, and a tested response path.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://access.redhat.com/solutions/28676" rel="noopener noreferrer"&gt;How to send auditd logs to a remote log server in RHEL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://access.redhat.com/articles/4409591" rel="noopener noreferrer"&gt;RHEL Audit System Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linuxauditd</category>
      <category>remotelogging</category>
      <category>forensics</category>
    </item>
    <item>
      <title>Reading the Signals in Security</title>
      <dc:creator>johnettagaweraks</dc:creator>
      <pubDate>Thu, 29 Oct 2026 09:01:06 +0000</pubDate>
      <link>https://dev.to/johnettagaweraks/reading-the-signals-in-security-de5</link>
      <guid>https://dev.to/johnettagaweraks/reading-the-signals-in-security-de5</guid>
      <description>&lt;p&gt;Cybersecurity often starts with small signals: a change in attacker behavior, a newly exposed weakness, or a detail in the way a tool is being used. I research threat intelligence and vulnerabilities to understand what those signals may mean for defenders.&lt;/p&gt;

&lt;p&gt;Here, I’ll share research notes, security tooling, and practical lessons from the field, along with occasional deeper dives. I hope these posts help you spot useful patterns and think through ways to strengthen your defenses.&lt;/p&gt;

</description>
      <category>infosec</category>
      <category>tooling</category>
      <category>cybersecurity</category>
      <category>security</category>
    </item>
  </channel>
</rss>
