攻击 Firecracker
来自 Grapl 的博客文章。在 Grapl,我们相信为了构建最好的防御系统,我们需要深入了解攻击者的行为。作为该目标的一部分,我们正在投资于进攻性安全研究。随时关注我们的博客,了解有关高风险漏洞、利用和高级威胁策略的新研究。
这篇博客文章介绍了如何攻击 Firecracker 中的漏洞,Firecracker 是一种用 Rust 编程语言编写的开源微型虚拟机 (microVM) 监视器。它是为在 AWS Lambda 中使用而开发的,这是一种无服务器软件即服务 (SaaS) 应用程序托管服务。Firecracker 也用于 AWS 的类似 Fargate 服务,该服务提供了一种运行容器的方法,而无需管理服务器以进行容器编排。由于多租户引入的风险,Firecracker 在设计时具有安全意识。
更多请看原文:https://www.graplsecurity.com/post/attacking-firecracker
由 tokio 运行时引起的奇怪的内存泄漏
这是 Reddit 上的一个讨论,发起者在代码中代码偶尔会在内存中删除并创建巨大的对象,并且发现它会有泄漏内存的现象。作者设法创建了一个具有类似内存问题的简单程序,如下:
use std::sync::Arc;
use std::time::Duration;
use tokio::sync::Mutex;
pub struct Object {
pub a: Vec<u32>,
pub b: Vec<u32>,
pub c: u32,
pub d: u32,
pub e: u32,
pub f: Option<u128>
}
#[allow(unused)]
pub struct ObjectHolder {
objects: Vec<Arc<Object>>
}
impl ObjectHolder {
pub fn new() -> ObjectHolder {
let mut res = vec![];
for _ in 0..10_000_000 {
res.push(Arc::new(Object {
a: vec![12123, 123123, 12123, 12124, 1231512],
b: vec![12423, 234, 2342],
c: 423423,
d: 123123,
e: 12312,
f: Some(392932)
}))
}
return ObjectHolder {
objects: res
}
}
}
pub struct Main {
holder: Arc<Mutex<ObjectHolder>>
}
impl Main {
pub fn new() -> Arc<Main> {
return Arc::new(Main {
holder: Arc::new(Mutex::new(ObjectHolder::new()))
})
}
pub async fn build_objects(&self) {
let mut holder = self.holder.lock().await;
*holder = ObjectHolder::new();
println!("BUILT NEW OBJECTS");
}
}
#[tokio::main]
async fn main() {
let main = Main::new();
let cnt_iter = 100;
tokio::spawn(async move {
for _ in 0..cnt_iter {
println!("STARTIGN NEW CYCLE");
main.build_objects().await;
(0..100).for_each(|_| {
tokio::spawn(async move {
return Some(0)
});
});
println!("WAITING 10 SECONDS");
tokio::time::sleep(Duration::from_secs(10)).await;
}
}).await.unwrap();
}
参与讨论请看:https://www.reddit.com/r/rust/comments/x9bq8k/bizarre_memory_leak_caused_by_tokio_runtime/
serde-numpy 项目
serde-numpy 是一个用于将 JSON 直接反序列化为 numpy 数组的库,主要使用 rust 实现。
项目地址:https://github.com/wnorcbrown/serde-numpy
From 日报小组 @Jancd
社区学习交流平台订阅:
Rust.cc论坛: 支持rss
微信公众号:Rust语言学习交流