Rust-Based Luca Stealer Spreads Across Linux and Windows Systems

Rust-Based Luca Stealer Spreads Across Linux and Windows Systems

Luca Stealer Spreads Across Linux and Windows Systems

Threat actors are increasingly abandoning traditional languages like C and C++ in favor of modern alternatives such as Golang, Rust, and Nim.

This strategic shift enables developers to compile malicious code for both Linux and Windows with minimal modifications.

Among the emerging threats in this landscape is “Luca Stealer,” a Rust-based information stealer that has recently appeared in the wild alongside other notable threats such as BlackCat ransomware.

The Rise of Luca Stealer

While Rust’s adoption in the malware community is still in its early stages compared to Golang, it is expanding rapidly.

Luca Stealer represents a significant development as it was released publicly under an open-source model.

built binary can be opened in a disassembler
built binary can be opened in a disassembler

This availability provides security researchers with a unique opportunity to study how Rust is used in malicious software design, offering critical insights for future defense strategies.

google

The shift to these languages requires defenders to develop new analysis techniques to detect and reverse-engineer these sophisticated binaries.

Analyzing Rust binaries presents unique challenges for defenders using standard tools. Unlike standard C programs, Rust executables handle strings differently.

leak the username of the user who compiled the program depending on where on disk the program was compiled
leak the username of the user who compiled the program depending on where on disk the program was compiled

Rust strings are not null-terminated, meaning they do not end with a “null byte” to mark the end of the text. This often causes reverse engineering tools like Ghidra to misinterpret data, leading to overlapping string definitions.

Analysts must usually manually clear code bytes and redefine strings to identify valid data correctly.

Additionally, finding the primary function in a Rust binary requires specific knowledge of the compiler’s output.

According to Binary Defence, the entry point typically initialises the environment and then calls a specific internal function (std::rt::lang_start_internal).

This function receives the address of the actual user-written primary function, which researchers can identify by tracing the arguments passed during this call.

One advantage for defenders is the presence of artifacts left by the Rust build system, Cargo. External dependencies, known as “crates,” are often statically linked into the binary.

Running the “RustDependencyStrings.py” script against the binary reveals the crates
Running the “RustDependencyStrings.py” script against the binary reveals the crates

By searching for specific string patterns, such as cargo\registry, analysts can list the libraries a malware sample uses, such as reqwest for HTTP requests.

Furthermore, compilation artifacts like PDB paths may remain in the “Debug Data” section, potentially leaking the author’s username or system paths.

As threat actors continue to leverage Rust, understanding these structural nuances is essential for effective detection.

Indicators of Compromise (IoCs)

Type Identifier Description
SHA256 8f47d1e39242ee4b528fcb6eb1a89983c27854bac57bc4a15597b37b7edf34a6 Unknown Rust Malware Sample
String cargo\registry Indicator of Rust crate dependencies
String std::rt::lang_start_internal Indicator of Rust runtime entry point

Follow us on Google News, LinkedIn, and X for daily cybersecurity updates. Contact us to feature your stories.

googlenews



Source link